From 85b1cfc1f07d0b93d88803c6c0ccadf8f3349719 Mon Sep 17 00:00:00 2001 From: vsr Date: Mon, 11 Feb 2008 15:08:07 +0000 Subject: [PATCH] Merge from BR_Dev_For_4_0 branch (from mergeto_BR_QT4_Dev_17Jan08 tag) --- BEFORE PORTING TO QT 4 --- --- adm_local/unix/config_files/check_SMESH.m4 | 8 +- build_configure | 61 +- configure.ac | 158 +- doc/salome/gui/Makefile.am | 18 +- doc/salome/gui/SMESH/about_viewing_meshes.htm | 174 - .../adding_quadratic_nodes_and_elements.htm | 124 - doc/salome/gui/SMESH/aspect_ratio_3d.htm | 203 - .../gui/SMESH/borders_at_multi-connection.htm | 121 - .../SMESH/borders_at_multiconnection_2d.htm | 115 - doc/salome/gui/SMESH/building_compounds.htm | 160 - doc/salome/gui/SMESH/clipping.htm | 140 - doc/salome/gui/SMESH/constructing_meshes.htm | 448 - doc/salome/gui/SMESH/cshdat_robohelp.htm | 258 - doc/salome/gui/SMESH/cshdat_webhelp.htm | 251 - doc/salome/gui/SMESH/default.css | 101 - doc/salome/gui/SMESH/default_ns.css | 118 - .../gui/SMESH/defining_hypotheses_tui.htm | 883 -- doc/salome/gui/SMESH/deleting_groups.htm | 119 - doc/salome/gui/SMESH/display_entity.htm | 101 - doc/salome/gui/SMESH/doxyfile.in | 49 + doc/salome/gui/SMESH/doxyfile_py.in | 137 + doc/salome/gui/SMESH/ehelp.xml | 10 - doc/salome/gui/SMESH/ehlpdhtm.js | 4239 --------- doc/salome/gui/SMESH/extrusion.htm | 164 - .../gui/SMESH/extrusion_along_a_path.htm | 378 - .../gui/SMESH/files/viewing_mesh_info.htm | 30 +- doc/salome/gui/SMESH/free_borders.htm | 120 - doc/salome/gui/SMESH/free_edges.htm | 122 - doc/salome/gui/SMESH/grouping_elements.htm | 662 -- doc/salome/gui/SMESH/i_blue.jpg | Bin 1337 -> 0 bytes doc/salome/gui/SMESH/image119.gif | Bin 1957 -> 0 bytes doc/salome/gui/SMESH/image142.gif | Bin 1631 -> 0 bytes doc/salome/gui/SMESH/image18.gif | Bin 3034 -> 0 bytes doc/salome/gui/SMESH/image19.gif | Bin 1196 -> 0 bytes doc/salome/gui/SMESH/image20.gif | Bin 2212 -> 0 bytes doc/salome/gui/SMESH/image30.gif | Bin 1040 -> 0 bytes .../gui/SMESH/images/a-arithmetic1d.png | Bin 0 -> 12239 bytes .../gui/SMESH/images/a-averagelength.png | Bin 0 -> 13679 bytes doc/salome/gui/SMESH/images/a-clipping2.png | Bin 0 -> 16713 bytes doc/salome/gui/SMESH/images/a-creategroup.png | Bin 0 -> 13788 bytes .../SMESH/images/a-createpolyhedralvolume.png | Bin 0 -> 16641 bytes .../SMESH/images/a-cuttingofquadrangles.png | Bin 0 -> 17452 bytes .../gui/SMESH/images/a-deflection1d.png | Bin 0 -> 11003 bytes .../gui/SMESH/images/a-filteronedges.png | Bin 0 -> 35867 bytes doc/salome/gui/SMESH/images/a-maxelarea.png | Bin 0 -> 11107 bytes doc/salome/gui/SMESH/images/a-maxelvolume.png | Bin 0 -> 11390 bytes doc/salome/gui/SMESH/images/a-nbsegments1.png | Bin 0 -> 13834 bytes doc/salome/gui/SMESH/images/a-nbsegments2.png | Bin 0 -> 14992 bytes doc/salome/gui/SMESH/images/a-patterntype.png | Bin 0 -> 13256 bytes .../gui/SMESH/images/a-patterntype1.png | Bin 0 -> 11034 bytes .../gui/SMESH/images/a-standmeshinfo.png | Bin 0 -> 10614 bytes .../gui/SMESH/images/a-startendlength.png | Bin 0 -> 12836 bytes .../gui/SMESH/images/a-transparency.png | Bin 0 -> 8161 bytes .../gui/SMESH/images/a-unionoftriangles.png | Bin 0 -> 15748 bytes doc/salome/gui/SMESH/images/a-viewgeneral.png | Bin 0 -> 47825 bytes .../SMESH/{image159.gif => images/add.gif} | Bin 927 -> 977 bytes doc/salome/gui/SMESH/images/add_edge.png | Bin 0 -> 3781 bytes doc/salome/gui/SMESH/images/add_node.png | Bin 0 -> 3659 bytes doc/salome/gui/SMESH/images/add_polygone.png | Bin 0 -> 7400 bytes .../gui/SMESH/images/add_polyhedron.png | Bin 0 -> 10074 bytes .../gui/SMESH/images/add_quadrangle.png | Bin 0 -> 3588 bytes doc/salome/gui/SMESH/images/add_triangle.png | Bin 0 -> 4078 bytes doc/salome/gui/SMESH/images/addedge.png | Bin 0 -> 8648 bytes doc/salome/gui/SMESH/images/addhexahedron.png | Bin 0 -> 9719 bytes doc/salome/gui/SMESH/images/addnode.png | Bin 0 -> 8888 bytes doc/salome/gui/SMESH/images/addpolygon.png | Bin 0 -> 10032 bytes doc/salome/gui/SMESH/images/addquadrangle.png | Bin 0 -> 10712 bytes .../gui/SMESH/images/addtetrahedron.png | Bin 0 -> 9683 bytes doc/salome/gui/SMESH/images/addtriangle.png | Bin 0 -> 9956 bytes .../gui/SMESH/images/advanced_mesh_infos.png | Bin 0 -> 23883 bytes doc/salome/gui/SMESH/images/aqt.png | Bin 0 -> 15347 bytes .../gui/SMESH/images/automaticlength.png | Bin 0 -> 10040 bytes .../gui/SMESH/images/b-art_end_length.png | Bin 0 -> 10612 bytes .../gui/SMESH/images/b-erage_length.png | Bin 0 -> 7198 bytes doc/salome/gui/SMESH/images/b-flection1d.png | Bin 0 -> 7295 bytes doc/salome/gui/SMESH/images/b-ithmetic1d.png | Bin 0 -> 10451 bytes .../gui/SMESH/images/b-mberofsegments.png | Bin 0 -> 25752 bytes doc/salome/gui/SMESH/images/b-mesh_infos.png | Bin 0 -> 27924 bytes doc/salome/gui/SMESH/images/buildcompound.png | Bin 0 -> 18585 bytes .../gui/SMESH/images/circle_angles_after.png | Bin 0 -> 7716 bytes .../gui/SMESH/images/circle_simple_after.png | Bin 0 -> 5858 bytes .../gui/SMESH/images/circle_simple_before.png | Bin 0 -> 4018 bytes doc/salome/gui/SMESH/images/convert.png | Bin 0 -> 12150 bytes doc/salome/gui/SMESH/images/create_group.png | Bin 0 -> 28719 bytes doc/salome/gui/SMESH/images/creategroup.png | Bin 0 -> 22502 bytes .../gui/SMESH/images/createmesh-inv.png | Bin 0 -> 19908 bytes .../gui/SMESH/images/createmesh-inv2.png | Bin 0 -> 21089 bytes .../gui/SMESH/images/createmesh-inv3.png | Bin 0 -> 20008 bytes .../gui/SMESH/images/curvi_angles_after.png | Bin 0 -> 4276 bytes .../gui/SMESH/images/curvi_simple_after.png | Bin 0 -> 4598 bytes .../gui/SMESH/images/curvi_simple_before.png | Bin 0 -> 3585 bytes doc/salome/gui/SMESH/images/cut_groups1.png | Bin 0 -> 31301 bytes doc/salome/gui/SMESH/images/cut_groups2.png | Bin 0 -> 33639 bytes doc/salome/gui/SMESH/images/cut_groups3.png | Bin 0 -> 26545 bytes doc/salome/gui/SMESH/images/cutgroups.png | Bin 0 -> 10203 bytes doc/salome/gui/SMESH/images/deletegroups.png | Bin 0 -> 8871 bytes .../gui/SMESH/images/diagonalinversion.png | Bin 0 -> 8602 bytes doc/salome/gui/SMESH/images/dialog.png | Bin 0 -> 12043 bytes .../SMESH/images/distribution_of_layers.png | Bin 0 -> 12502 bytes .../distributionwithanalyticdensity.png | Bin 0 -> 27728 bytes .../images/distributionwithtabledensity.png | Bin 0 -> 30802 bytes .../gui/SMESH/images/edge_wire_3d_after.png | Bin 0 -> 3477 bytes .../gui/SMESH/images/edge_wire_3d_before.png | Bin 0 -> 5212 bytes .../gui/SMESH/images/edge_wire_after.png | Bin 0 -> 3185 bytes .../gui/SMESH/images/edge_wire_before.png | Bin 0 -> 5036 bytes doc/salome/gui/SMESH/images/edit_mesh1.png | Bin 0 -> 27435 bytes .../images/edit_mesh_change_value_hyp.png | Bin 0 -> 33103 bytes .../gui/SMESH/images/edit_mesh_remove_hyp.png | Bin 0 -> 23860 bytes doc/salome/gui/SMESH/images/editgroup.png | Bin 0 -> 29322 bytes .../gui/SMESH/images/editing_groups1.png | Bin 0 -> 52411 bytes .../gui/SMESH/images/editing_groups2.png | Bin 0 -> 45764 bytes doc/salome/gui/SMESH/images/eleminfo1.png | Bin 0 -> 13974 bytes doc/salome/gui/SMESH/images/eleminfo2.png | Bin 0 -> 15912 bytes doc/salome/gui/SMESH/images/extrusion1.png | Bin 0 -> 23388 bytes doc/salome/gui/SMESH/images/extrusion2.png | Bin 0 -> 23467 bytes .../gui/SMESH/images/extrusionalongaline1.png | Bin 0 -> 16878 bytes .../gui/SMESH/images/extrusionalongaline2.png | Bin 0 -> 16961 bytes .../gui/SMESH/images/failed_computation.png | Bin 0 -> 5767 bytes doc/salome/gui/SMESH/images/formula1.png | Bin 0 -> 8611 bytes doc/salome/gui/SMESH/images/formula2.png | Bin 0 -> 13997 bytes doc/salome/gui/SMESH/images/formula4.png | Bin 0 -> 5266 bytes doc/salome/gui/SMESH/images/free_borders1.png | Bin 0 -> 5648 bytes doc/salome/gui/SMESH/images/free_edges.png | Bin 0 -> 41176 bytes doc/salome/gui/SMESH/{ => images}/image10.jpg | Bin 16038 -> 16039 bytes .../gui/SMESH/{ => images}/image101.gif | Bin .../gui/SMESH/{ => images}/image105.gif | Bin .../gui/SMESH/{ => images}/image106.gif | Bin .../gui/SMESH/{ => images}/image120.gif | Bin .../gui/SMESH/{ => images}/image121.gif | Bin .../gui/SMESH/{ => images}/image122.gif | Bin .../gui/SMESH/{ => images}/image123.gif | Bin .../gui/SMESH/{ => images}/image124.gif | Bin .../gui/SMESH/{ => images}/image125.gif | Bin .../gui/SMESH/{ => images}/image126.gif | Bin .../gui/SMESH/{ => images}/image127.gif | Bin .../gui/SMESH/{ => images}/image130.gif | Bin .../gui/SMESH/{ => images}/image131.gif | Bin 2631 -> 2632 bytes .../gui/SMESH/{ => images}/image132.gif | Bin .../gui/SMESH/{ => images}/image133.gif | Bin .../gui/SMESH/{ => images}/image134.gif | Bin .../gui/SMESH/{ => images}/image135.gif | Bin .../gui/SMESH/{ => images}/image136.gif | Bin .../gui/SMESH/{ => images}/image137.gif | Bin doc/salome/gui/SMESH/images/image138.gif | Bin 0 -> 4819 bytes .../gui/SMESH/{ => images}/image143.gif | Bin .../gui/SMESH/{ => images}/image144.gif | Bin .../gui/SMESH/{ => images}/image145.gif | Bin .../gui/SMESH/{ => images}/image146.gif | Bin .../gui/SMESH/{ => images}/image147.gif | Bin .../gui/SMESH/{ => images}/image148.gif | Bin doc/salome/gui/SMESH/{ => images}/image15.jpg | Bin .../gui/SMESH/{ => images}/image151.gif | Bin .../gui/SMESH/{ => images}/image152.gif | Bin .../{whd_toc4.gif => images/image154.gif} | Bin 952 -> 1001 bytes doc/salome/gui/SMESH/images/image155.gif | Bin 0 -> 8217 bytes doc/salome/gui/SMESH/images/image156.gif | Bin 0 -> 4956 bytes .../gui/SMESH/{ => images}/image157.gif | Bin .../gui/SMESH/{ => images}/image160.gif | Bin .../gui/SMESH/{ => images}/image161.gif | Bin doc/salome/gui/SMESH/{ => images}/image22.jpg | Bin doc/salome/gui/SMESH/{ => images}/image23.jpg | Bin doc/salome/gui/SMESH/{ => images}/image24.gif | Bin doc/salome/gui/SMESH/{ => images}/image25.gif | Bin doc/salome/gui/SMESH/{ => images}/image25.jpg | Bin doc/salome/gui/SMESH/{ => images}/image27.jpg | Bin doc/salome/gui/SMESH/{ => images}/image28.gif | Bin doc/salome/gui/SMESH/{ => images}/image30.jpg | Bin doc/salome/gui/SMESH/{ => images}/image31.jpg | Bin doc/salome/gui/SMESH/{ => images}/image32.gif | Bin doc/salome/gui/SMESH/{ => images}/image32.jpg | Bin doc/salome/gui/SMESH/{ => images}/image33.gif | Bin doc/salome/gui/SMESH/{ => images}/image34.gif | Bin doc/salome/gui/SMESH/{ => images}/image35.gif | Bin doc/salome/gui/SMESH/{ => images}/image36.gif | Bin doc/salome/gui/SMESH/{ => images}/image36.jpg | Bin doc/salome/gui/SMESH/{ => images}/image37.gif | Bin 1000 -> 1001 bytes doc/salome/gui/SMESH/{ => images}/image37.jpg | Bin doc/salome/gui/SMESH/{ => images}/image38.gif | Bin doc/salome/gui/SMESH/{ => images}/image38.jpg | Bin doc/salome/gui/SMESH/{ => images}/image39.gif | Bin doc/salome/gui/SMESH/{ => images}/image40.gif | Bin doc/salome/gui/SMESH/{ => images}/image41.gif | Bin doc/salome/gui/SMESH/{ => images}/image46.gif | Bin doc/salome/gui/SMESH/{ => images}/image49.gif | Bin doc/salome/gui/SMESH/{ => images}/image5.jpg | Bin doc/salome/gui/SMESH/{ => images}/image50.gif | Bin doc/salome/gui/SMESH/{ => images}/image51.jpg | Bin doc/salome/gui/SMESH/{ => images}/image52.jpg | Bin doc/salome/gui/SMESH/{ => images}/image53.gif | Bin doc/salome/gui/SMESH/{ => images}/image55.gif | Bin doc/salome/gui/SMESH/{ => images}/image56.gif | Bin doc/salome/gui/SMESH/{ => images}/image56.jpg | Bin doc/salome/gui/SMESH/{ => images}/image58.gif | Bin doc/salome/gui/SMESH/{ => images}/image63.gif | Bin doc/salome/gui/SMESH/{ => images}/image64.gif | Bin doc/salome/gui/SMESH/{ => images}/image67.gif | Bin doc/salome/gui/SMESH/{ => images}/image7.jpg | Bin 66667 -> 66668 bytes doc/salome/gui/SMESH/{ => images}/image70.gif | Bin doc/salome/gui/SMESH/{ => images}/image70.jpg | Bin doc/salome/gui/SMESH/{ => images}/image71.gif | Bin doc/salome/gui/SMESH/{ => images}/image71.jpg | Bin 11549 -> 11550 bytes doc/salome/gui/SMESH/{ => images}/image74.gif | Bin 986 -> 987 bytes doc/salome/gui/SMESH/{ => images}/image76.jpg | Bin doc/salome/gui/SMESH/{ => images}/image77.jpg | Bin doc/salome/gui/SMESH/{ => images}/image78.jpg | Bin doc/salome/gui/SMESH/{ => images}/image79.gif | Bin doc/salome/gui/SMESH/{ => images}/image79.jpg | Bin doc/salome/gui/SMESH/{ => images}/image80.gif | Bin doc/salome/gui/SMESH/{ => images}/image82.gif | Bin doc/salome/gui/SMESH/{ => images}/image83.gif | Bin doc/salome/gui/SMESH/{ => images}/image84.gif | Bin doc/salome/gui/SMESH/{ => images}/image86.jpg | Bin doc/salome/gui/SMESH/{ => images}/image88.gif | Bin doc/salome/gui/SMESH/{ => images}/image88.jpg | Bin doc/salome/gui/SMESH/{ => images}/image90.jpg | Bin doc/salome/gui/SMESH/{ => images}/image91.gif | Bin doc/salome/gui/SMESH/{ => images}/image92.gif | Bin doc/salome/gui/SMESH/{ => images}/image92.jpg | Bin doc/salome/gui/SMESH/{ => images}/image93.jpg | Bin doc/salome/gui/SMESH/{ => images}/image94.gif | Bin doc/salome/gui/SMESH/{ => images}/image94.jpg | Bin doc/salome/gui/SMESH/{ => images}/image95.gif | Bin doc/salome/gui/SMESH/{ => images}/image95.jpg | Bin doc/salome/gui/SMESH/{ => images}/image96.gif | Bin doc/salome/gui/SMESH/{ => images}/image96.jpg | Bin doc/salome/gui/SMESH/{ => images}/image97.gif | Bin doc/salome/gui/SMESH/{ => images}/image97.jpg | Bin doc/salome/gui/SMESH/{ => images}/image98.gif | Bin doc/salome/gui/SMESH/{ => images}/image99.gif | Bin .../gui/SMESH/images/intersect_groups1.png | Bin 0 -> 30782 bytes .../gui/SMESH/images/intersect_groups2.png | Bin 0 -> 34579 bytes .../gui/SMESH/images/intersect_groups3.png | Bin 0 -> 31212 bytes .../gui/SMESH/images/intersectgroups.png | Bin 0 -> 10439 bytes doc/salome/gui/SMESH/images/length-crit.png | Bin 0 -> 3113 bytes doc/salome/gui/SMESH/images/length2d.png | Bin 0 -> 43379 bytes .../gui/SMESH/images/lengthnearvertex.png | Bin 0 -> 11402 bytes doc/salome/gui/SMESH/images/max_el_area.png | Bin 0 -> 29048 bytes doc/salome/gui/SMESH/images/mergeelems.png | Bin 0 -> 19490 bytes doc/salome/gui/SMESH/images/mergenodes.png | Bin 0 -> 23896 bytes .../gui/SMESH/images/merging_nodes1.png | Bin 0 -> 28624 bytes .../gui/SMESH/images/merging_nodes2.png | Bin 0 -> 17338 bytes .../gui/SMESH/images/mesh_cylinder_hexa.png | Bin 0 -> 17404 bytes .../SMESH/images/mesh_for_extr_along_path.png | Bin 0 -> 4658 bytes .../gui/SMESH/images/mesh_node_to_point.png | Bin 0 -> 188 bytes .../gui/SMESH/images/meshcomputationfail.png | Bin 0 -> 27336 bytes .../SMESH/images/meshcomputationsucceed.png | Bin 0 -> 26320 bytes .../gui/SMESH/images/meshexportmesh.png | Bin 0 -> 21288 bytes .../gui/SMESH/images/meshimportmesh.png | Bin 0 -> 19532 bytes doc/salome/gui/SMESH/images/meshtopass.png | Bin 0 -> 16356 bytes .../SMESH/images/meshtrianglemergeelem1.png | Bin 0 -> 2921 bytes doc/salome/gui/SMESH/images/movenodes.png | Bin 0 -> 10486 bytes doc/salome/gui/SMESH/images/moving_nodes1.png | Bin 0 -> 15776 bytes doc/salome/gui/SMESH/images/moving_nodes2.png | Bin 0 -> 20232 bytes doc/salome/gui/SMESH/images/netgen2d.png | Bin 0 -> 21454 bytes .../gui/SMESH/images/number_of_layers.png | Bin 0 -> 11539 bytes doc/salome/gui/SMESH/images/orientaation1.png | Bin 0 -> 14549 bytes .../gui/SMESH/images/patternmapping1.png | Bin 0 -> 17945 bytes .../gui/SMESH/images/patternmapping2.png | Bin 0 -> 19946 bytes doc/salome/gui/SMESH/images/projection_1d.png | Bin 0 -> 14401 bytes doc/salome/gui/SMESH/images/projection_2d.png | Bin 0 -> 17347 bytes doc/salome/gui/SMESH/images/projection_3d.png | Bin 0 -> 17967 bytes .../SMESH/{image103.gif => images/remove.gif} | Bin 987 -> 981 bytes .../gui/SMESH/images/remove_elements1.png | Bin 0 -> 7989 bytes .../gui/SMESH/images/remove_elements2.png | Bin 0 -> 5244 bytes .../gui/SMESH/images/remove_elements_icon.png | Bin 0 -> 313 bytes doc/salome/gui/SMESH/images/remove_nodes1.png | Bin 0 -> 11701 bytes doc/salome/gui/SMESH/images/remove_nodes2.png | Bin 0 -> 13889 bytes .../gui/SMESH/images/removeelements.png | Bin 0 -> 9172 bytes doc/salome/gui/SMESH/images/removenodes.png | Bin 0 -> 9095 bytes .../gui/SMESH/images/renumberelements.png | Bin 0 -> 9153 bytes doc/salome/gui/SMESH/images/renumbernodes.png | Bin 0 -> 9279 bytes doc/salome/gui/SMESH/images/revolution1.png | Bin 0 -> 21827 bytes doc/salome/gui/SMESH/images/revolution2.png | Bin 0 -> 21898 bytes doc/salome/gui/SMESH/images/rotation.png | Bin 0 -> 23022 bytes doc/salome/gui/SMESH/images/rotation1.png | Bin 0 -> 15828 bytes doc/salome/gui/SMESH/images/rotation2.png | Bin 0 -> 25671 bytes .../SMESH/images/selectionfilterlibrary.png | Bin 0 -> 28008 bytes doc/salome/gui/SMESH/images/sewing1.png | Bin 0 -> 21295 bytes doc/salome/gui/SMESH/images/sewing2.png | Bin 0 -> 18771 bytes doc/salome/gui/SMESH/images/sewing3.png | Bin 0 -> 21209 bytes doc/salome/gui/SMESH/images/sewing4.png | Bin 0 -> 17818 bytes doc/salome/gui/SMESH/images/smoothing.png | Bin 0 -> 16679 bytes doc/salome/gui/SMESH/images/smoothing1.png | Bin 0 -> 12244 bytes doc/salome/gui/SMESH/images/smoothing2.png | Bin 0 -> 12606 bytes .../SMESH/{image108.gif => images/sort.gif} | Bin 1009 -> 982 bytes .../gui/SMESH/images/straight_after.png | Bin 0 -> 5369 bytes .../gui/SMESH/images/straight_before.png | Bin 0 -> 3623 bytes doc/salome/gui/SMESH/images/symmetry1.png | Bin 0 -> 19741 bytes doc/salome/gui/SMESH/images/symmetry2.png | Bin 0 -> 21831 bytes doc/salome/gui/SMESH/images/symmetry3.png | Bin 0 -> 21797 bytes doc/salome/gui/SMESH/images/translation1.png | Bin 0 -> 20689 bytes doc/salome/gui/SMESH/images/translation2.png | Bin 0 -> 19462 bytes doc/salome/gui/SMESH/images/union_groups1.png | Bin 0 -> 45746 bytes doc/salome/gui/SMESH/images/union_groups2.png | Bin 0 -> 33473 bytes doc/salome/gui/SMESH/images/union_groups3.png | Bin 0 -> 34013 bytes doc/salome/gui/SMESH/images/uniongroups.png | Bin 0 -> 10111 bytes .../gui/SMESH/images/unionoftwotriangles.png | Bin 0 -> 8729 bytes .../images/uniting_a_set_of_triangles1.png | Bin 0 -> 10030 bytes .../images/uniting_a_set_of_triangles2.png | Bin 0 -> 9189 bytes .../SMESH/images/uniting_two_triangles1.png | Bin 0 -> 10718 bytes .../SMESH/images/uniting_two_triangles2.png | Bin 0 -> 9239 bytes doc/salome/gui/SMESH/index.htm | 180 - doc/salome/gui/SMESH/index_csh.htm | 106 - doc/salome/gui/SMESH/index_rhc.htm | 106 - .../gui/SMESH/input/1d_meshing_hypo.doc | 167 + .../gui/SMESH/input/2d_meshing_hypo.doc | 51 + doc/salome/gui/SMESH/input/about_hypo.doc | 52 + doc/salome/gui/SMESH/input/about_meshes.doc | 86 + .../SMESH/input/about_quality_controls.doc | 44 + .../SMESH/input/adding_nodes_and_elements.doc | 140 + .../SMESH/input/adding_quadratic_elements.doc | 41 + .../gui/SMESH/input/additional_hypo.doc | 35 + doc/salome/gui/SMESH/input/area.doc | 29 + doc/salome/gui/SMESH/input/aspect_ratio.doc | 44 + .../gui/SMESH/input/aspect_ratio_3d.doc | 40 + .../gui/SMESH/input/basic_meshing_algos.doc | 61 + .../input/borders_at_multi_connection.doc | 16 + .../input/borders_at_multi_connection_2d.doc | 13 + .../gui/SMESH/input/building_compounds.doc | 46 + .../changing_orientation_of_elements.doc | 44 + doc/salome/gui/SMESH/input/clipping.doc | 28 + ...nstructing_groups_of_specific_elements.doc | 17 + .../gui/SMESH/input/constructing_meshes.doc | 112 + .../SMESH/input/constructing_submeshes.doc | 53 + .../input/convert_to_from_quadratic_mesh.doc | 40 + .../gui/SMESH/input/creating_groups.doc | 84 + .../gui/SMESH/input/creating_meshes.doc | 31 + .../gui/SMESH/input/cutting_quadrangles.doc | 63 + doc/salome/gui/SMESH/input/defining_algos.doc | 13 + doc/salome/gui/SMESH/input/defining_hypo.doc | 14 + .../gui/SMESH/input/deleting_groups.doc | 19 + .../input/diagonal_inversion_of_elements.doc | 33 + doc/salome/gui/SMESH/input/display_entity.doc | 12 + doc/salome/gui/SMESH/input/display_mode.doc | 22 + doc/salome/gui/SMESH/input/editing_groups.doc | 27 + doc/salome/gui/SMESH/input/editing_meshes.doc | 31 + doc/salome/gui/SMESH/input/extrusion.doc | 49 + .../gui/SMESH/input/extrusion_along_path.doc | 153 + doc/salome/gui/SMESH/input/free_borders.doc | 15 + doc/salome/gui/SMESH/input/free_edges.doc | 15 + .../gui/SMESH/input/grouping_elements.doc | 14 + .../input/importing_exporting_meshes.doc | 37 + doc/salome/gui/SMESH/input/index.doc | 114 + .../gui/SMESH/input/introduction_to_mesh.doc | 64 + .../input/introduction_to_mesh_python.doc | 77 + doc/salome/gui/SMESH/input/length.doc | 13 + doc/salome/gui/SMESH/input/length_2d.doc | 28 + .../SMESH/input/max_element_volume_hypo.doc | 16 + .../gui/SMESH/input/merging_elements.doc | 56 + doc/salome/gui/SMESH/input/merging_nodes.doc | 61 + doc/salome/gui/SMESH/input/mesh_infos.doc | 63 + .../gui/SMESH/input/mesh_through_point.doc | 34 + doc/salome/gui/SMESH/input/minimum_angle.doc | 28 + .../gui/SMESH/input/modifying_meshes.doc | 34 + doc/salome/gui/SMESH/input/moving_nodes.doc | 36 + .../gui/SMESH/input/netgen_2d_3d_hypo.doc | 37 + doc/salome/gui/SMESH/input/numbering.doc | 38 + .../gui/SMESH/input/pattern_mapping.doc | 135 + doc/salome/gui/SMESH/input/prism_3d_algo.doc | 20 + .../gui/SMESH/input/projection_algos.doc | 74 + .../gui/SMESH/input/quality_controls.doc | 23 + .../gui/SMESH/input/radial_prism_algo.doc | 24 + .../input/removing_nodes_and_elements.doc | 76 + .../input/renumbering_nodes_and_elements.doc | 61 + doc/salome/gui/SMESH/input/revolution.doc | 51 + doc/salome/gui/SMESH/input/rotation.doc | 37 + .../gui/SMESH/input/running_mesh_module.doc | 16 + .../input/segments_around_vertex_algo.doc | 17 + .../SMESH/input/selection_filter_library.doc | 46 + doc/salome/gui/SMESH/input/sewing_meshes.doc | 159 + doc/salome/gui/SMESH/input/skew.doc | 32 + .../gui/SMESH/input/smeshpy_interface.doc | 10 + doc/salome/gui/SMESH/input/smoothing.doc | 77 + doc/salome/gui/SMESH/input/symmetry.doc | 42 + doc/salome/gui/SMESH/input/taper.doc | 32 + .../gui/SMESH/input/transforming_meshes.doc | 14 + doc/salome/gui/SMESH/input/translation.doc | 35 + doc/salome/gui/SMESH/input/transparency.doc | 11 + .../gui/SMESH/input/tui_creating_meshes.doc | 184 + .../SMESH/input/tui_defining_hypotheses.doc | 385 + .../gui/SMESH/input/tui_grouping_elements.doc | 277 + .../gui/SMESH/input/tui_modifying_meshes.doc | 817 ++ .../gui/SMESH/input/tui_quality_controls.doc | 575 ++ doc/salome/gui/SMESH/input/tui_scripts.doc | 15 + .../SMESH/input/tui_transforming_meshes.doc | 322 + .../gui/SMESH/input/tui_viewing_meshes.doc | 47 + .../SMESH/input/uniting_set_of_triangles.doc | 53 + .../gui/SMESH/input/uniting_two_triangles.doc | 34 + .../input/using_operations_on_groups.doc | 123 + doc/salome/gui/SMESH/input/viewing_meshes.doc | 15 + .../SMESH/input/viewing_meshes_overview.doc | 50 + doc/salome/gui/SMESH/input/volume.doc | 28 + doc/salome/gui/SMESH/input/warping.doc | 43 + doc/salome/gui/SMESH/length.htm | 118 - doc/salome/gui/SMESH/merge_elements.htm | 101 - doc/salome/gui/SMESH/mesh.htm | 216 - doc/salome/gui/SMESH/mesh_through_point.htm | 132 - doc/salome/gui/SMESH/modifying_meshes.htm | 1881 ---- .../gui/SMESH/netgen_2d_and_3d_hypotheses.htm | 146 - doc/salome/gui/SMESH/note1.gif | Bin 1505 -> 0 bytes doc/salome/gui/SMESH/pattern_mapping.htm | 311 - doc/salome/gui/SMESH/pics/dialog.png | Bin 0 -> 11155 bytes doc/salome/gui/SMESH/pics/eleminfo1.png | Bin 0 -> 13974 bytes doc/salome/gui/SMESH/pics/eleminfo2.png | Bin 0 -> 15912 bytes doc/salome/gui/SMESH/pics/mergeelems.png | Bin 8680 -> 19490 bytes doc/salome/gui/SMESH/presentation.htm | 138 - doc/salome/gui/SMESH/prism_3d_algorithm.htm | 114 - .../gui/SMESH/projection_algorithms.htm | 179 - doc/salome/gui/SMESH/quality_controls.htm | 1270 --- doc/salome/gui/SMESH/radial_prism.htm | 124 - doc/salome/gui/SMESH/revolution.htm | 156 - .../segments_around_vertex_algorithm.htm | 98 - .../gui/SMESH/selection_filter_library.htm | 159 - doc/salome/gui/SMESH/smesh.log | 553 -- .../gui/SMESH/smesh.py_introduction.htm | 270 - .../smeshpy_doc/classsmeshDC_1_1Mesh.html | 6622 ++++++++++++++ .../classsmeshDC_1_1Mesh__Algorithm.html | 408 + ...hDC_1_1Mesh__Algorithm__inherit__graph.jpg | Bin 0 -> 39007 bytes ...lasssmeshDC_1_1Mesh__CompositeSegment.html | 772 ++ ...Mesh__CompositeSegment__inherit__graph.jpg | Bin 0 -> 9319 bytes .../classsmeshDC_1_1Mesh__Hexahedron.html | 436 + ...DC_1_1Mesh__Hexahedron__inherit__graph.jpg | Bin 0 -> 6117 bytes .../classsmeshDC_1_1Mesh__Netgen.html | 502 ++ ...meshDC_1_1Mesh__Netgen__inherit__graph.jpg | Bin 0 -> 5726 bytes .../classsmeshDC_1_1Mesh__Prism3D.html | 436 + ...eshDC_1_1Mesh__Prism3D__inherit__graph.jpg | Bin 0 -> 5776 bytes .../classsmeshDC_1_1Mesh__Projection1D.html | 494 + ..._1_1Mesh__Projection1D__inherit__graph.jpg | Bin 0 -> 6163 bytes .../classsmeshDC_1_1Mesh__Projection2D.html | 508 ++ ..._1_1Mesh__Projection2D__inherit__graph.jpg | Bin 0 -> 6163 bytes .../classsmeshDC_1_1Mesh__Projection3D.html | 508 ++ ..._1_1Mesh__Projection3D__inherit__graph.jpg | Bin 0 -> 6163 bytes .../classsmeshDC_1_1Mesh__Quadrangle.html | 459 + ...DC_1_1Mesh__Quadrangle__inherit__graph.jpg | Bin 0 -> 6049 bytes .../classsmeshDC_1_1Mesh__RadialPrism3D.html | 775 ++ ...1_1Mesh__RadialPrism3D__inherit__graph.jpg | Bin 0 -> 6343 bytes .../classsmeshDC_1_1Mesh__Segment.html | 773 ++ ...classsmeshDC_1_1Mesh__Segment__Python.html | 816 ++ ...1Mesh__Segment__Python__inherit__graph.jpg | Bin 0 -> 9145 bytes ...eshDC_1_1Mesh__Segment__inherit__graph.jpg | Bin 0 -> 13776 bytes .../classsmeshDC_1_1Mesh__Tetrahedron.html | 800 ++ ...C_1_1Mesh__Tetrahedron__inherit__graph.jpg | Bin 0 -> 6069 bytes .../classsmeshDC_1_1Mesh__Triangle.html | 855 ++ ...shDC_1_1Mesh__Triangle__inherit__graph.jpg | Bin 0 -> 5752 bytes .../smeshpy_doc/classsmeshDC_1_1smeshDC.html | 740 ++ ...lasssmeshDC_1_1smeshDC__inherit__graph.jpg | Bin 0 -> 5548 bytes .../SMESH/smeshpy_doc/classsmesh_1_1Mesh.html | 7910 ----------------- .../classsmesh_1_1Mesh__Algorithm.html | 556 -- ...esh_1_1Mesh__Algorithm__inherit__graph.jpg | Bin 35584 -> 0 bytes .../classsmesh_1_1Mesh__CompositeSegment.html | 973 -- ...Mesh__CompositeSegment__inherit__graph.jpg | Bin 7883 -> 0 bytes .../classsmesh_1_1Mesh__Hexahedron.html | 592 -- ...sh_1_1Mesh__Hexahedron__inherit__graph.jpg | Bin 5525 -> 0 bytes .../classsmesh_1_1Mesh__Netgen.html | 681 -- ...ssmesh_1_1Mesh__Netgen__inherit__graph.jpg | Bin 5126 -> 0 bytes .../classsmesh_1_1Mesh__Prism3D.html | 592 -- ...smesh_1_1Mesh__Prism3D__inherit__graph.jpg | Bin 5214 -> 0 bytes .../classsmesh_1_1Mesh__Projection1D.html | 658 -- ..._1_1Mesh__Projection1D__inherit__graph.jpg | Bin 5481 -> 0 bytes .../classsmesh_1_1Mesh__Projection2D.html | 672 -- ..._1_1Mesh__Projection2D__inherit__graph.jpg | Bin 5484 -> 0 bytes .../classsmesh_1_1Mesh__Projection3D.html | 672 -- ..._1_1Mesh__Projection3D__inherit__graph.jpg | Bin 5485 -> 0 bytes .../classsmesh_1_1Mesh__Quadrangle.html | 623 -- ...sh_1_1Mesh__Quadrangle__inherit__graph.jpg | Bin 5392 -> 0 bytes .../classsmesh_1_1Mesh__RadialPrism3D.html | 1011 --- ...1_1Mesh__RadialPrism3D__inherit__graph.jpg | Bin 5774 -> 0 bytes .../classsmesh_1_1Mesh__Segment.html | 974 -- .../classsmesh_1_1Mesh__Segment__Python.html | 1025 --- ...1Mesh__Segment__Python__inherit__graph.jpg | Bin 7802 -> 0 bytes ...smesh_1_1Mesh__Segment__inherit__graph.jpg | Bin 12303 -> 0 bytes .../classsmesh_1_1Mesh__Tetrahedron.html | 1059 --- ...h_1_1Mesh__Tetrahedron__inherit__graph.jpg | Bin 5448 -> 0 bytes .../classsmesh_1_1Mesh__Triangle.html | 1130 --- ...mesh_1_1Mesh__Triangle__inherit__graph.jpg | Bin 5149 -> 0 bytes .../gui/SMESH/smeshpy_doc/namespacesmesh.html | 1382 +-- .../SMESH/smeshpy_doc/namespacesmeshDC.html | 530 ++ doc/salome/gui/SMESH/static/doxygen.css | 170 + doc/salome/gui/SMESH/static/footer.html | 10 + doc/salome/gui/SMESH/static/header.html | 12 + .../gui/SMESH/texture_horiz_ltbluebubbles.jpg | Bin 1255 -> 0 bytes doc/salome/gui/SMESH/transforming_meshes.htm | 758 -- doc/salome/gui/SMESH/transparency.htm | 98 - doc/salome/gui/SMESH/viewing_meshes.htm | 187 - doc/salome/gui/SMESH/volume.htm | 123 - doc/salome/gui/SMESH/webhelp.cab | Bin 89619 -> 0 bytes doc/salome/gui/SMESH/webhelp.jar | Bin 134515 -> 0 bytes doc/salome/gui/SMESH/whcsh_home.htm | 600 -- doc/salome/gui/SMESH/whcshdata.htm | 87 - doc/salome/gui/SMESH/whd_dpns.htm | 43 - doc/salome/gui/SMESH/whd_hide0.gif | Bin 190 -> 0 bytes doc/salome/gui/SMESH/whd_hide1.gif | Bin 190 -> 0 bytes doc/salome/gui/SMESH/whd_hide2.gif | Bin 190 -> 0 bytes doc/salome/gui/SMESH/whd_next0.gif | Bin 159 -> 0 bytes doc/salome/gui/SMESH/whd_next1.gif | Bin 159 -> 0 bytes doc/salome/gui/SMESH/whd_next2.gif | Bin 159 -> 0 bytes doc/salome/gui/SMESH/whd_nvp10.htm | 15 - doc/salome/gui/SMESH/whd_nvp20.htm | 334 - doc/salome/gui/SMESH/whd_prev0.gif | Bin 159 -> 0 bytes doc/salome/gui/SMESH/whd_prev1.gif | Bin 159 -> 0 bytes doc/salome/gui/SMESH/whd_prev2.gif | Bin 159 -> 0 bytes doc/salome/gui/SMESH/whd_show0.gif | Bin 199 -> 0 bytes doc/salome/gui/SMESH/whd_show1.gif | Bin 199 -> 0 bytes doc/salome/gui/SMESH/whd_show2.gif | Bin 199 -> 0 bytes doc/salome/gui/SMESH/whd_sync0.gif | Bin 231 -> 0 bytes doc/salome/gui/SMESH/whd_sync1.gif | Bin 231 -> 0 bytes doc/salome/gui/SMESH/whd_sync2.gif | Bin 231 -> 0 bytes doc/salome/gui/SMESH/whd_tab0.gif | Bin 285 -> 0 bytes doc/salome/gui/SMESH/whd_tab1.gif | Bin 237 -> 0 bytes doc/salome/gui/SMESH/whd_tab2.gif | Bin 226 -> 0 bytes doc/salome/gui/SMESH/whd_tab3.gif | Bin 209 -> 0 bytes doc/salome/gui/SMESH/whd_tab4.gif | Bin 198 -> 0 bytes doc/salome/gui/SMESH/whd_tab5.gif | Bin 221 -> 0 bytes doc/salome/gui/SMESH/whd_tab6.gif | Bin 212 -> 0 bytes doc/salome/gui/SMESH/whd_tab7.gif | Bin 236 -> 0 bytes doc/salome/gui/SMESH/whd_tab8.gif | Bin 225 -> 0 bytes doc/salome/gui/SMESH/whd_tabs.htm | 533 -- doc/salome/gui/SMESH/whd_toc1.gif | Bin 153 -> 0 bytes doc/salome/gui/SMESH/whd_toc2.gif | Bin 173 -> 0 bytes doc/salome/gui/SMESH/whd_toc3.gif | Bin 158 -> 0 bytes doc/salome/gui/SMESH/whd_topic.xml | 85 - doc/salome/gui/SMESH/whd_wbsh0.gif | Bin 260 -> 0 bytes doc/salome/gui/SMESH/whd_wbsh1.gif | Bin 260 -> 0 bytes doc/salome/gui/SMESH/whd_wbsh2.gif | Bin 260 -> 0 bytes doc/salome/gui/SMESH/whfbody.htm | 37 - doc/salome/gui/SMESH/whfdhtml.htm | 30 - doc/salome/gui/SMESH/whfform.htm | 136 - doc/salome/gui/SMESH/whfhost.js | 945 -- doc/salome/gui/SMESH/whform.js | 216 - doc/salome/gui/SMESH/whframes.js | 79 - doc/salome/gui/SMESH/whgbody.htm | 35 - doc/salome/gui/SMESH/whgdef.htm | 98 - doc/salome/gui/SMESH/whgdhtml.htm | 150 - doc/salome/gui/SMESH/whghost.js | 247 - doc/salome/gui/SMESH/whhost.js | 1305 --- doc/salome/gui/SMESH/whibody.htm | 284 - doc/salome/gui/SMESH/whidhtml.htm | 30 - doc/salome/gui/SMESH/whiform.htm | 91 - doc/salome/gui/SMESH/whihost.js | 424 - doc/salome/gui/SMESH/whlang.js | 453 - doc/salome/gui/SMESH/whmozemu.js | 67 - doc/salome/gui/SMESH/whmsg.js | 69 - doc/salome/gui/SMESH/whnjs.htm | 25 - doc/salome/gui/SMESH/whphost.js | 581 -- doc/salome/gui/SMESH/whproj.htm | 24 - doc/salome/gui/SMESH/whproj.js | 85 - doc/salome/gui/SMESH/whproj.xml | 3 - doc/salome/gui/SMESH/whproxy.js | 74 - doc/salome/gui/SMESH/whres.xml | 256 - doc/salome/gui/SMESH/whskin_blank.htm | 10 - doc/salome/gui/SMESH/whskin_homepage.htm | 180 - doc/salome/gui/SMESH/whskin_info.htm | 20 - doc/salome/gui/SMESH/whskin_pickup.htm | 229 - doc/salome/gui/SMESH/whskin_tw.htm | 63 - doc/salome/gui/SMESH/whstart.js | 432 - doc/salome/gui/SMESH/whstub.js | 159 - doc/salome/gui/SMESH/whtdhtml.htm | 49 - doc/salome/gui/SMESH/whthost.js | 1504 ---- doc/salome/gui/SMESH/whtopic.js | 725 -- doc/salome/gui/SMESH/whutils.js | 527 -- doc/salome/gui/SMESH/whver.js | 103 - doc/salome/tui/Makefile.am | 6 +- doc/salome/tui/SMESH/doxyfile.in | 3 +- idl/SMESH_BasicHypothesis.idl | 40 +- idl/SMESH_Gen.idl | 39 +- idl/SMESH_Group.idl | 15 +- idl/SMESH_Mesh.idl | 38 + idl/SMESH_MeshEditor.idl | 222 +- resources/Makefile.am | 1 + resources/SMESHCatalog.xml.in | 5 + resources/SMESH_en.xml | 8 + resources/SalomeApp.xml | 3 + resources/StdMeshers.xml | 16 + resources/mesh_tree_mesh_partial.png | Bin 313 -> 27767 bytes resources/mesh_whatis.png | Bin 0 -> 414 bytes src/DriverMED/DriverMED_Family.cxx | 9 +- src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx | 17 +- src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx | 29 + src/DriverMED/DriverMED_W_SMESHDS_Mesh.h | 1 + src/DriverUNV/Makefile.am | 2 + src/DriverUNV/UNV2417_Structure.cxx | 10 +- src/MEFISTO2/aptrte.cxx | 22 +- src/MEFISTO2/aptrte.h | 73 +- src/Makefile.am | 13 +- src/OBJECT/SMESH_Actor.cxx | 4 +- src/OBJECT/SMESH_Object.cxx | 46 +- src/OBJECT/SMESH_Object.h | 2 +- src/OBJECT/SMESH_ObjectDef.h | 6 +- src/SMDS/Makefile.am | 11 +- src/SMDS/SMDSAbs_ElementType.hxx | 9 +- src/SMDS/SMDS_Iterator.hxx | 6 +- src/SMDS/SMDS_MemoryLimit.cxx | 47 + src/SMDS/SMDS_Mesh.cxx | 277 +- src/SMDS/SMDS_Mesh.hxx | 34 +- src/SMDS/SMDS_MeshGroup.cxx | 4 +- src/SMDS/SMDS_MeshInfo.hxx | 188 + src/SMDS/SMDS_VolumeTool.cxx | 21 +- src/SMDS/SMDS_VolumeTool.hxx | 7 + src/SMDS/SMESH_SMDS.hxx | 2 +- src/SMESH/SMESH_0D_Algo.hxx | 4 +- src/SMESH/SMESH_2D_Algo.cxx | 6 +- src/SMESH/SMESH_Algo.cxx | 8 +- src/SMESH/SMESH_Algo.hxx | 15 +- src/SMESH/SMESH_Block.cxx | 355 +- src/SMESH/SMESH_Block.hxx | 26 +- src/SMESH/SMESH_Gen.cxx | 25 +- src/SMESH/SMESH_Gen.hxx | 4 +- src/SMESH/SMESH_Group.hxx | 8 +- src/SMESH/SMESH_HypoFilter.hxx | 8 +- src/SMESH/SMESH_Mesh.cxx | 630 +- src/SMESH/SMESH_Mesh.hxx | 153 +- src/SMESH/SMESH_MeshEditor.cxx | 633 +- src/SMESH/SMESH_MeshEditor.hxx | 102 +- src/SMESH/SMESH_MesherHelper.cxx | 57 +- src/SMESH/SMESH_MesherHelper.hxx | 20 +- src/SMESH/SMESH_Pattern.cxx | 201 +- src/SMESH/SMESH_Pattern.hxx | 12 +- src/SMESH/SMESH_subMesh.cxx | 326 +- src/SMESH/SMESH_subMesh.hxx | 2 +- src/SMESHClient/Makefile.am | 2 + src/SMESHDS/SMESHDS_Document.cxx | 12 + src/SMESHDS/SMESHDS_Group.cxx | 12 + src/SMESHDS/SMESHDS_Group.hxx | 2 + src/SMESHDS/SMESHDS_GroupBase.cxx | 59 +- src/SMESHDS/SMESHDS_GroupBase.hxx | 18 +- src/SMESHDS/SMESHDS_GroupOnGeom.cxx | 11 + src/SMESHDS/SMESHDS_GroupOnGeom.hxx | 2 + src/SMESHDS/SMESHDS_Mesh.cxx | 34 +- src/SMESHDS/SMESHDS_SubMesh.cxx | 14 + src/SMESHDS/SMESHDS_SubMesh.hxx | 6 + src/SMESHDS/SMESH_SMESHDS.hxx | 2 +- src/SMESHFiltersSelection/Makefile.am | 11 +- .../SMESH_NumberFilter.cxx | 14 +- .../SMESH_NumberFilter.hxx | 5 +- .../SMESH_TypeFilter.cxx | 60 +- src/SMESHGUI/Makefile.am | 2 + src/SMESHGUI/SMESHGUI.cxx | 357 +- src/SMESHGUI/SMESHGUI.h | 3 + src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx | 14 +- .../SMESHGUI_AddQuadraticElementDlg.cxx | 14 +- src/SMESHGUI/SMESHGUI_BuildCompoundDlg.cxx | 2 +- src/SMESHGUI/SMESHGUI_ClippingDlg.cxx | 2 +- src/SMESHGUI/SMESHGUI_ComputeDlg.cxx | 314 +- src/SMESHGUI/SMESHGUI_ComputeDlg.h | 5 +- src/SMESHGUI/SMESHGUI_ConvToQuadOp.cxx | 2 +- src/SMESHGUI/SMESHGUI_CreatePatternDlg.cxx | 2 +- .../SMESHGUI_CreatePolyhedralVolumeDlg.cxx | 2 +- src/SMESHGUI/SMESHGUI_DeleteGroupDlg.cxx | 2 +- src/SMESHGUI/SMESHGUI_EditMeshDlg.cxx | 2 +- .../SMESHGUI_ExtrusionAlongPathDlg.cxx | 33 +- src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.h | 1 + src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx | 168 +- src/SMESHGUI/SMESHGUI_ExtrusionDlg.h | 6 +- src/SMESHGUI/SMESHGUI_FilterDlg.cxx | 5 +- src/SMESHGUI/SMESHGUI_FilterLibraryDlg.cxx | 2 +- src/SMESHGUI/SMESHGUI_GroupDlg.cxx | 228 +- src/SMESHGUI/SMESHGUI_GroupDlg.h | 18 +- src/SMESHGUI/SMESHGUI_GroupOpDlg.cxx | 6 +- src/SMESHGUI/SMESHGUI_Hypotheses.cxx | 73 +- src/SMESHGUI/SMESHGUI_Hypotheses.h | 32 +- src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx | 90 +- src/SMESHGUI/SMESHGUI_HypothesesUtils.h | 3 +- src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx | 13 +- src/SMESHGUI/SMESHGUI_MergeNodesDlg.cxx | 2 +- src/SMESHGUI/SMESHGUI_MeshDlg.cxx | 21 + src/SMESHGUI/SMESHGUI_MeshDlg.h | 3 + src/SMESHGUI/SMESHGUI_MeshInfosDlg.cxx | 2 +- src/SMESHGUI/SMESHGUI_MeshOp.cxx | 488 +- src/SMESHGUI/SMESHGUI_MeshOp.h | 28 +- src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx | 2 +- src/SMESHGUI/SMESHGUI_MeshUtils.cxx | 24 + src/SMESHGUI/SMESHGUI_MeshUtils.h | 3 + src/SMESHGUI/SMESHGUI_MoveNodesDlg.cxx | 14 +- src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx | 6 +- src/SMESHGUI/SMESHGUI_NodesDlg.cxx | 16 +- src/SMESHGUI/SMESHGUI_RemoveElementsDlg.cxx | 2 +- src/SMESHGUI/SMESHGUI_RemoveNodesDlg.cxx | 2 +- src/SMESHGUI/SMESHGUI_RenumberingDlg.cxx | 4 +- src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx | 27 +- src/SMESHGUI/SMESHGUI_RevolutionDlg.h | 1 + src/SMESHGUI/SMESHGUI_RotationDlg.cxx | 136 +- src/SMESHGUI/SMESHGUI_RotationDlg.h | 7 +- src/SMESHGUI/SMESHGUI_Selection.cxx | 84 +- src/SMESHGUI/SMESHGUI_Selection.h | 1 + src/SMESHGUI/SMESHGUI_SewingDlg.cxx | 2 +- src/SMESHGUI/SMESHGUI_SingleEditDlg.cxx | 4 +- src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx | 2 +- src/SMESHGUI/SMESHGUI_SpinBox.h | 1 + .../SMESHGUI_StandardMeshInfosDlg.cxx | 21 +- src/SMESHGUI/SMESHGUI_Swig.cxx | 131 +- src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx | 136 +- src/SMESHGUI/SMESHGUI_SymmetryDlg.h | 9 +- src/SMESHGUI/SMESHGUI_TranslationDlg.cxx | 140 +- src/SMESHGUI/SMESHGUI_TranslationDlg.h | 7 +- src/SMESHGUI/SMESHGUI_TransparencyDlg.cxx | 2 +- src/SMESHGUI/SMESHGUI_VTKUtils.cxx | 452 +- src/SMESHGUI/SMESHGUI_VTKUtils.h | 10 +- src/SMESHGUI/SMESHGUI_WhatIsDlg.cxx | 626 ++ src/SMESHGUI/SMESHGUI_WhatIsDlg.h | 130 + src/SMESHGUI/SMESHGUI_XmlHandler.cxx | 6 +- src/SMESHGUI/SMESH_images.po | 3 + src/SMESHGUI/SMESH_msg_en.po | 140 +- src/SMESH_I/Makefile.am | 3 + src/SMESH_I/SMESH.hxx | 28 +- src/SMESH_I/SMESH_0D_Algo_i.hxx | 4 +- src/SMESH_I/SMESH_2smeshpy.cxx | 442 +- src/SMESH_I/SMESH_2smeshpy.hxx | 126 +- src/SMESH_I/SMESH_DumpPython.cxx | 47 + src/SMESH_I/SMESH_Filter_i.cxx | 100 +- src/SMESH_I/SMESH_Gen_i.cxx | 274 +- src/SMESH_I/SMESH_Gen_i.hxx | 10 +- src/SMESH_I/SMESH_Gen_i_1.cxx | 52 +- src/SMESH_I/SMESH_Group_i.cxx | 46 +- src/SMESH_I/SMESH_Group_i.hxx | 7 +- src/SMESH_I/SMESH_Hypothesis_i.cxx | 2 +- src/SMESH_I/SMESH_MeshEditor_i.cxx | 1545 +++- src/SMESH_I/SMESH_MeshEditor_i.hxx | 275 +- src/SMESH_I/SMESH_Mesh_i.cxx | 459 +- src/SMESH_I/SMESH_Mesh_i.hxx | 43 +- src/SMESH_I/SMESH_Pattern_i.cxx | 23 +- src/SMESH_I/SMESH_PythonDump.hxx | 38 +- src/SMESH_I/SMESH_subMesh_i.cxx | 11 +- src/SMESH_I/SMESH_subMesh_i.hxx | 4 + src/SMESH_SWIG/Makefile.am | 86 +- src/SMESH_SWIG/ex24_cylinder.py | 104 + src/SMESH_SWIG/smesh.py | 2561 +----- src/SMESH_SWIG/smeshDC.py | 3326 +++++++ src/SMESH_SWIG_WITHIHM/Makefile.am | 115 + .../libSMESH_Swig.i | 0 src/StdMeshers/Makefile.am | 13 +- .../StdMeshers_CompositeSegment_1D.cxx | 10 +- .../StdMeshers_CompositeSegment_1D.hxx | 3 +- src/StdMeshers/StdMeshers_Distribution.cxx | 34 +- src/StdMeshers/StdMeshers_FaceSide.cxx | 52 +- src/StdMeshers/StdMeshers_FaceSide.hxx | 23 +- src/StdMeshers/StdMeshers_Hexa_3D.cxx | 25 +- src/StdMeshers/StdMeshers_Hexa_3D.hxx | 2 +- src/StdMeshers/StdMeshers_LocalLength.cxx | 59 +- src/StdMeshers/StdMeshers_LocalLength.hxx | 5 +- src/StdMeshers/StdMeshers_MEFISTO_2D.cxx | 74 +- .../StdMeshers_NumberOfSegments.cxx | 78 +- src/StdMeshers/StdMeshers_Penta_3D.cxx | 9 +- src/StdMeshers/StdMeshers_Prism_3D.cxx | 156 +- src/StdMeshers/StdMeshers_Prism_3D.hxx | 4 +- .../StdMeshers_ProjectionSource1D.cxx | 6 +- .../StdMeshers_ProjectionSource1D.hxx | 13 +- .../StdMeshers_ProjectionSource2D.cxx | 8 +- .../StdMeshers_ProjectionSource2D.hxx | 13 +- src/StdMeshers/StdMeshers_ProjectionUtils.cxx | 695 +- src/StdMeshers/StdMeshers_ProjectionUtils.hxx | 37 +- src/StdMeshers/StdMeshers_Projection_1D.cxx | 81 +- src/StdMeshers/StdMeshers_Projection_2D.cxx | 95 +- src/StdMeshers/StdMeshers_Projection_3D.cxx | 31 +- src/StdMeshers/StdMeshers_Propagation.cxx | 497 +- src/StdMeshers/StdMeshers_Propagation.hxx | 2 +- .../StdMeshers_QuadranglePreference.cxx | 2 +- src/StdMeshers/StdMeshers_Quadrangle_2D.cxx | 57 +- src/StdMeshers/StdMeshers_Quadrangle_2D.hxx | 21 +- src/StdMeshers/StdMeshers_RadialPrism_3D.cxx | 48 +- src/StdMeshers/StdMeshers_Regular_1D.cxx | 110 +- src/StdMeshers/StdMeshers_Regular_1D.hxx | 18 +- .../StdMeshers_SegmentAroundVertex_0D.hxx | 4 +- .../StdMeshers_SegmentLengthAroundVertex.hxx | 4 +- .../StdMeshers_UseExisting_1D2D.cxx | 102 + .../StdMeshers_UseExisting_1D2D.hxx | 65 + src/StdMeshersGUI/SMESH_StdMeshersGUI.hxx | 2 +- .../StdMeshersGUI_DistrPreview.cxx | 34 +- ...tdMeshersGUI_LayerDistributionParamWdg.cxx | 12 +- .../StdMeshersGUI_LayerDistributionParamWdg.h | 4 +- .../StdMeshersGUI_NbSegmentsCreator.cxx | 3 +- .../StdMeshersGUI_StdHypothesisCreator.cxx | 37 +- src/StdMeshersGUI/StdMeshers_msg_en.po | 3 + src/StdMeshers_I/Makefile.am | 3 +- src/StdMeshers_I/StdMeshers_LocalLength_i.cxx | 52 +- src/StdMeshers_I/StdMeshers_LocalLength_i.hxx | 6 + .../StdMeshers_NumberOfSegments_i.cxx | 18 +- .../StdMeshers_ProjectionSource1D_i.cxx | 8 +- .../StdMeshers_ProjectionSource1D_i.hxx | 4 +- .../StdMeshers_UseExisting_1D2D_i.cxx | 103 + .../StdMeshers_UseExisting_1D2D_i.hxx | 80 + src/StdMeshers_I/StdMeshers_i.cxx | 5 + 781 files changed, 37605 insertions(+), 55171 deletions(-) delete mode 100755 doc/salome/gui/SMESH/about_viewing_meshes.htm delete mode 100755 doc/salome/gui/SMESH/adding_quadratic_nodes_and_elements.htm delete mode 100755 doc/salome/gui/SMESH/aspect_ratio_3d.htm delete mode 100755 doc/salome/gui/SMESH/borders_at_multi-connection.htm delete mode 100755 doc/salome/gui/SMESH/borders_at_multiconnection_2d.htm delete mode 100755 doc/salome/gui/SMESH/building_compounds.htm delete mode 100755 doc/salome/gui/SMESH/clipping.htm delete mode 100755 doc/salome/gui/SMESH/constructing_meshes.htm delete mode 100755 doc/salome/gui/SMESH/cshdat_robohelp.htm delete mode 100755 doc/salome/gui/SMESH/cshdat_webhelp.htm delete mode 100755 doc/salome/gui/SMESH/default.css delete mode 100755 doc/salome/gui/SMESH/default_ns.css delete mode 100755 doc/salome/gui/SMESH/defining_hypotheses_tui.htm delete mode 100755 doc/salome/gui/SMESH/deleting_groups.htm delete mode 100755 doc/salome/gui/SMESH/display_entity.htm create mode 100755 doc/salome/gui/SMESH/doxyfile.in create mode 100755 doc/salome/gui/SMESH/doxyfile_py.in delete mode 100755 doc/salome/gui/SMESH/ehelp.xml delete mode 100755 doc/salome/gui/SMESH/ehlpdhtm.js delete mode 100755 doc/salome/gui/SMESH/extrusion.htm delete mode 100755 doc/salome/gui/SMESH/extrusion_along_a_path.htm delete mode 100755 doc/salome/gui/SMESH/free_borders.htm delete mode 100755 doc/salome/gui/SMESH/free_edges.htm delete mode 100755 doc/salome/gui/SMESH/grouping_elements.htm delete mode 100755 doc/salome/gui/SMESH/i_blue.jpg delete mode 100755 doc/salome/gui/SMESH/image119.gif delete mode 100755 doc/salome/gui/SMESH/image142.gif delete mode 100755 doc/salome/gui/SMESH/image18.gif delete mode 100755 doc/salome/gui/SMESH/image19.gif delete mode 100755 doc/salome/gui/SMESH/image20.gif delete mode 100755 doc/salome/gui/SMESH/image30.gif create mode 100755 doc/salome/gui/SMESH/images/a-arithmetic1d.png create mode 100755 doc/salome/gui/SMESH/images/a-averagelength.png create mode 100755 doc/salome/gui/SMESH/images/a-clipping2.png create mode 100755 doc/salome/gui/SMESH/images/a-creategroup.png create mode 100755 doc/salome/gui/SMESH/images/a-createpolyhedralvolume.png create mode 100755 doc/salome/gui/SMESH/images/a-cuttingofquadrangles.png create mode 100755 doc/salome/gui/SMESH/images/a-deflection1d.png create mode 100755 doc/salome/gui/SMESH/images/a-filteronedges.png create mode 100755 doc/salome/gui/SMESH/images/a-maxelarea.png create mode 100755 doc/salome/gui/SMESH/images/a-maxelvolume.png create mode 100755 doc/salome/gui/SMESH/images/a-nbsegments1.png create mode 100755 doc/salome/gui/SMESH/images/a-nbsegments2.png create mode 100755 doc/salome/gui/SMESH/images/a-patterntype.png create mode 100755 doc/salome/gui/SMESH/images/a-patterntype1.png create mode 100755 doc/salome/gui/SMESH/images/a-standmeshinfo.png create mode 100755 doc/salome/gui/SMESH/images/a-startendlength.png create mode 100755 doc/salome/gui/SMESH/images/a-transparency.png create mode 100755 doc/salome/gui/SMESH/images/a-unionoftriangles.png create mode 100755 doc/salome/gui/SMESH/images/a-viewgeneral.png rename doc/salome/gui/SMESH/{image159.gif => images/add.gif} (72%) mode change 100755 => 100644 create mode 100755 doc/salome/gui/SMESH/images/add_edge.png create mode 100755 doc/salome/gui/SMESH/images/add_node.png create mode 100755 doc/salome/gui/SMESH/images/add_polygone.png create mode 100755 doc/salome/gui/SMESH/images/add_polyhedron.png create mode 100755 doc/salome/gui/SMESH/images/add_quadrangle.png create mode 100755 doc/salome/gui/SMESH/images/add_triangle.png create mode 100755 doc/salome/gui/SMESH/images/addedge.png create mode 100755 doc/salome/gui/SMESH/images/addhexahedron.png create mode 100755 doc/salome/gui/SMESH/images/addnode.png create mode 100755 doc/salome/gui/SMESH/images/addpolygon.png create mode 100755 doc/salome/gui/SMESH/images/addquadrangle.png create mode 100755 doc/salome/gui/SMESH/images/addtetrahedron.png create mode 100755 doc/salome/gui/SMESH/images/addtriangle.png create mode 100755 doc/salome/gui/SMESH/images/advanced_mesh_infos.png create mode 100755 doc/salome/gui/SMESH/images/aqt.png create mode 100755 doc/salome/gui/SMESH/images/automaticlength.png create mode 100755 doc/salome/gui/SMESH/images/b-art_end_length.png create mode 100755 doc/salome/gui/SMESH/images/b-erage_length.png create mode 100755 doc/salome/gui/SMESH/images/b-flection1d.png create mode 100755 doc/salome/gui/SMESH/images/b-ithmetic1d.png create mode 100755 doc/salome/gui/SMESH/images/b-mberofsegments.png create mode 100755 doc/salome/gui/SMESH/images/b-mesh_infos.png create mode 100755 doc/salome/gui/SMESH/images/buildcompound.png create mode 100644 doc/salome/gui/SMESH/images/circle_angles_after.png create mode 100644 doc/salome/gui/SMESH/images/circle_simple_after.png create mode 100644 doc/salome/gui/SMESH/images/circle_simple_before.png create mode 100644 doc/salome/gui/SMESH/images/convert.png create mode 100755 doc/salome/gui/SMESH/images/create_group.png create mode 100755 doc/salome/gui/SMESH/images/creategroup.png create mode 100755 doc/salome/gui/SMESH/images/createmesh-inv.png create mode 100755 doc/salome/gui/SMESH/images/createmesh-inv2.png create mode 100755 doc/salome/gui/SMESH/images/createmesh-inv3.png create mode 100644 doc/salome/gui/SMESH/images/curvi_angles_after.png create mode 100644 doc/salome/gui/SMESH/images/curvi_simple_after.png create mode 100644 doc/salome/gui/SMESH/images/curvi_simple_before.png create mode 100755 doc/salome/gui/SMESH/images/cut_groups1.png create mode 100755 doc/salome/gui/SMESH/images/cut_groups2.png create mode 100755 doc/salome/gui/SMESH/images/cut_groups3.png create mode 100755 doc/salome/gui/SMESH/images/cutgroups.png create mode 100755 doc/salome/gui/SMESH/images/deletegroups.png create mode 100755 doc/salome/gui/SMESH/images/diagonalinversion.png create mode 100755 doc/salome/gui/SMESH/images/dialog.png create mode 100644 doc/salome/gui/SMESH/images/distribution_of_layers.png create mode 100755 doc/salome/gui/SMESH/images/distributionwithanalyticdensity.png create mode 100755 doc/salome/gui/SMESH/images/distributionwithtabledensity.png create mode 100644 doc/salome/gui/SMESH/images/edge_wire_3d_after.png create mode 100644 doc/salome/gui/SMESH/images/edge_wire_3d_before.png create mode 100644 doc/salome/gui/SMESH/images/edge_wire_after.png create mode 100644 doc/salome/gui/SMESH/images/edge_wire_before.png create mode 100755 doc/salome/gui/SMESH/images/edit_mesh1.png create mode 100755 doc/salome/gui/SMESH/images/edit_mesh_change_value_hyp.png create mode 100755 doc/salome/gui/SMESH/images/edit_mesh_remove_hyp.png create mode 100755 doc/salome/gui/SMESH/images/editgroup.png create mode 100755 doc/salome/gui/SMESH/images/editing_groups1.png create mode 100755 doc/salome/gui/SMESH/images/editing_groups2.png create mode 100755 doc/salome/gui/SMESH/images/eleminfo1.png create mode 100755 doc/salome/gui/SMESH/images/eleminfo2.png create mode 100644 doc/salome/gui/SMESH/images/extrusion1.png create mode 100755 doc/salome/gui/SMESH/images/extrusion2.png create mode 100755 doc/salome/gui/SMESH/images/extrusionalongaline1.png create mode 100755 doc/salome/gui/SMESH/images/extrusionalongaline2.png create mode 100644 doc/salome/gui/SMESH/images/failed_computation.png create mode 100644 doc/salome/gui/SMESH/images/formula1.png create mode 100644 doc/salome/gui/SMESH/images/formula2.png create mode 100644 doc/salome/gui/SMESH/images/formula4.png create mode 100755 doc/salome/gui/SMESH/images/free_borders1.png create mode 100755 doc/salome/gui/SMESH/images/free_edges.png rename doc/salome/gui/SMESH/{ => images}/image10.jpg (99%) rename doc/salome/gui/SMESH/{ => images}/image101.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image105.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image106.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image120.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image121.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image122.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image123.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image124.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image125.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image126.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image127.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image130.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image131.gif (98%) rename doc/salome/gui/SMESH/{ => images}/image132.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image133.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image134.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image135.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image136.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image137.gif (100%) create mode 100644 doc/salome/gui/SMESH/images/image138.gif rename doc/salome/gui/SMESH/{ => images}/image143.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image144.gif (100%) mode change 100755 => 100644 rename doc/salome/gui/SMESH/{ => images}/image145.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image146.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image147.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image148.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image15.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image151.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image152.gif (100%) rename doc/salome/gui/SMESH/{whd_toc4.gif => images/image154.gif} (63%) mode change 100755 => 100644 create mode 100644 doc/salome/gui/SMESH/images/image155.gif create mode 100644 doc/salome/gui/SMESH/images/image156.gif rename doc/salome/gui/SMESH/{ => images}/image157.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image160.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image161.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image22.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image23.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image24.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image25.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image25.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image27.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image28.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image30.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image31.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image32.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image32.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image33.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image34.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image35.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image36.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image36.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image37.gif (91%) mode change 100755 => 100644 rename doc/salome/gui/SMESH/{ => images}/image37.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image38.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image38.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image39.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image40.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image41.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image46.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image49.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image5.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image50.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image51.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image52.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image53.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image55.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image56.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image56.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image58.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image63.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image64.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image67.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image7.jpg (99%) mode change 100755 => 100644 rename doc/salome/gui/SMESH/{ => images}/image70.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image70.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image71.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image71.jpg (99%) rename doc/salome/gui/SMESH/{ => images}/image74.gif (90%) rename doc/salome/gui/SMESH/{ => images}/image76.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image77.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image78.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image79.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image79.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image80.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image82.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image83.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image84.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image86.jpg (100%) mode change 100755 => 100644 rename doc/salome/gui/SMESH/{ => images}/image88.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image88.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image90.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image91.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image92.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image92.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image93.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image94.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image94.jpg (100%) mode change 100755 => 100644 rename doc/salome/gui/SMESH/{ => images}/image95.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image95.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image96.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image96.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image97.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image97.jpg (100%) rename doc/salome/gui/SMESH/{ => images}/image98.gif (100%) rename doc/salome/gui/SMESH/{ => images}/image99.gif (100%) create mode 100755 doc/salome/gui/SMESH/images/intersect_groups1.png create mode 100755 doc/salome/gui/SMESH/images/intersect_groups2.png create mode 100755 doc/salome/gui/SMESH/images/intersect_groups3.png create mode 100755 doc/salome/gui/SMESH/images/intersectgroups.png create mode 100755 doc/salome/gui/SMESH/images/length-crit.png create mode 100755 doc/salome/gui/SMESH/images/length2d.png create mode 100755 doc/salome/gui/SMESH/images/lengthnearvertex.png create mode 100755 doc/salome/gui/SMESH/images/max_el_area.png create mode 100755 doc/salome/gui/SMESH/images/mergeelems.png create mode 100755 doc/salome/gui/SMESH/images/mergenodes.png create mode 100755 doc/salome/gui/SMESH/images/merging_nodes1.png create mode 100755 doc/salome/gui/SMESH/images/merging_nodes2.png create mode 100644 doc/salome/gui/SMESH/images/mesh_cylinder_hexa.png create mode 100644 doc/salome/gui/SMESH/images/mesh_for_extr_along_path.png create mode 100644 doc/salome/gui/SMESH/images/mesh_node_to_point.png create mode 100644 doc/salome/gui/SMESH/images/meshcomputationfail.png create mode 100644 doc/salome/gui/SMESH/images/meshcomputationsucceed.png create mode 100755 doc/salome/gui/SMESH/images/meshexportmesh.png create mode 100755 doc/salome/gui/SMESH/images/meshimportmesh.png create mode 100755 doc/salome/gui/SMESH/images/meshtopass.png create mode 100755 doc/salome/gui/SMESH/images/meshtrianglemergeelem1.png create mode 100755 doc/salome/gui/SMESH/images/movenodes.png create mode 100755 doc/salome/gui/SMESH/images/moving_nodes1.png create mode 100755 doc/salome/gui/SMESH/images/moving_nodes2.png create mode 100644 doc/salome/gui/SMESH/images/netgen2d.png create mode 100644 doc/salome/gui/SMESH/images/number_of_layers.png create mode 100755 doc/salome/gui/SMESH/images/orientaation1.png create mode 100755 doc/salome/gui/SMESH/images/patternmapping1.png create mode 100755 doc/salome/gui/SMESH/images/patternmapping2.png create mode 100644 doc/salome/gui/SMESH/images/projection_1d.png create mode 100644 doc/salome/gui/SMESH/images/projection_2d.png create mode 100644 doc/salome/gui/SMESH/images/projection_3d.png rename doc/salome/gui/SMESH/{image103.gif => images/remove.gif} (71%) mode change 100755 => 100644 create mode 100755 doc/salome/gui/SMESH/images/remove_elements1.png create mode 100755 doc/salome/gui/SMESH/images/remove_elements2.png create mode 100644 doc/salome/gui/SMESH/images/remove_elements_icon.png create mode 100755 doc/salome/gui/SMESH/images/remove_nodes1.png create mode 100755 doc/salome/gui/SMESH/images/remove_nodes2.png create mode 100755 doc/salome/gui/SMESH/images/removeelements.png create mode 100755 doc/salome/gui/SMESH/images/removenodes.png create mode 100755 doc/salome/gui/SMESH/images/renumberelements.png create mode 100755 doc/salome/gui/SMESH/images/renumbernodes.png create mode 100755 doc/salome/gui/SMESH/images/revolution1.png create mode 100755 doc/salome/gui/SMESH/images/revolution2.png create mode 100755 doc/salome/gui/SMESH/images/rotation.png create mode 100755 doc/salome/gui/SMESH/images/rotation1.png create mode 100755 doc/salome/gui/SMESH/images/rotation2.png create mode 100755 doc/salome/gui/SMESH/images/selectionfilterlibrary.png create mode 100755 doc/salome/gui/SMESH/images/sewing1.png create mode 100755 doc/salome/gui/SMESH/images/sewing2.png create mode 100755 doc/salome/gui/SMESH/images/sewing3.png create mode 100755 doc/salome/gui/SMESH/images/sewing4.png create mode 100755 doc/salome/gui/SMESH/images/smoothing.png create mode 100755 doc/salome/gui/SMESH/images/smoothing1.png create mode 100755 doc/salome/gui/SMESH/images/smoothing2.png rename doc/salome/gui/SMESH/{image108.gif => images/sort.gif} (69%) mode change 100755 => 100644 create mode 100644 doc/salome/gui/SMESH/images/straight_after.png create mode 100644 doc/salome/gui/SMESH/images/straight_before.png create mode 100755 doc/salome/gui/SMESH/images/symmetry1.png create mode 100755 doc/salome/gui/SMESH/images/symmetry2.png create mode 100755 doc/salome/gui/SMESH/images/symmetry3.png create mode 100755 doc/salome/gui/SMESH/images/translation1.png create mode 100755 doc/salome/gui/SMESH/images/translation2.png create mode 100755 doc/salome/gui/SMESH/images/union_groups1.png create mode 100755 doc/salome/gui/SMESH/images/union_groups2.png create mode 100755 doc/salome/gui/SMESH/images/union_groups3.png create mode 100755 doc/salome/gui/SMESH/images/uniongroups.png create mode 100755 doc/salome/gui/SMESH/images/unionoftwotriangles.png create mode 100755 doc/salome/gui/SMESH/images/uniting_a_set_of_triangles1.png create mode 100755 doc/salome/gui/SMESH/images/uniting_a_set_of_triangles2.png create mode 100755 doc/salome/gui/SMESH/images/uniting_two_triangles1.png create mode 100755 doc/salome/gui/SMESH/images/uniting_two_triangles2.png delete mode 100755 doc/salome/gui/SMESH/index.htm delete mode 100755 doc/salome/gui/SMESH/index_csh.htm delete mode 100755 doc/salome/gui/SMESH/index_rhc.htm create mode 100644 doc/salome/gui/SMESH/input/1d_meshing_hypo.doc create mode 100644 doc/salome/gui/SMESH/input/2d_meshing_hypo.doc create mode 100644 doc/salome/gui/SMESH/input/about_hypo.doc create mode 100644 doc/salome/gui/SMESH/input/about_meshes.doc create mode 100644 doc/salome/gui/SMESH/input/about_quality_controls.doc create mode 100644 doc/salome/gui/SMESH/input/adding_nodes_and_elements.doc create mode 100644 doc/salome/gui/SMESH/input/adding_quadratic_elements.doc create mode 100644 doc/salome/gui/SMESH/input/additional_hypo.doc create mode 100644 doc/salome/gui/SMESH/input/area.doc create mode 100644 doc/salome/gui/SMESH/input/aspect_ratio.doc create mode 100644 doc/salome/gui/SMESH/input/aspect_ratio_3d.doc create mode 100644 doc/salome/gui/SMESH/input/basic_meshing_algos.doc create mode 100644 doc/salome/gui/SMESH/input/borders_at_multi_connection.doc create mode 100644 doc/salome/gui/SMESH/input/borders_at_multi_connection_2d.doc create mode 100644 doc/salome/gui/SMESH/input/building_compounds.doc create mode 100644 doc/salome/gui/SMESH/input/changing_orientation_of_elements.doc create mode 100644 doc/salome/gui/SMESH/input/clipping.doc create mode 100644 doc/salome/gui/SMESH/input/constructing_groups_of_specific_elements.doc create mode 100644 doc/salome/gui/SMESH/input/constructing_meshes.doc create mode 100644 doc/salome/gui/SMESH/input/constructing_submeshes.doc create mode 100644 doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.doc create mode 100644 doc/salome/gui/SMESH/input/creating_groups.doc create mode 100644 doc/salome/gui/SMESH/input/creating_meshes.doc create mode 100644 doc/salome/gui/SMESH/input/cutting_quadrangles.doc create mode 100644 doc/salome/gui/SMESH/input/defining_algos.doc create mode 100644 doc/salome/gui/SMESH/input/defining_hypo.doc create mode 100644 doc/salome/gui/SMESH/input/deleting_groups.doc create mode 100644 doc/salome/gui/SMESH/input/diagonal_inversion_of_elements.doc create mode 100644 doc/salome/gui/SMESH/input/display_entity.doc create mode 100644 doc/salome/gui/SMESH/input/display_mode.doc create mode 100644 doc/salome/gui/SMESH/input/editing_groups.doc create mode 100644 doc/salome/gui/SMESH/input/editing_meshes.doc create mode 100644 doc/salome/gui/SMESH/input/extrusion.doc create mode 100644 doc/salome/gui/SMESH/input/extrusion_along_path.doc create mode 100644 doc/salome/gui/SMESH/input/free_borders.doc create mode 100644 doc/salome/gui/SMESH/input/free_edges.doc create mode 100644 doc/salome/gui/SMESH/input/grouping_elements.doc create mode 100644 doc/salome/gui/SMESH/input/importing_exporting_meshes.doc create mode 100644 doc/salome/gui/SMESH/input/index.doc create mode 100644 doc/salome/gui/SMESH/input/introduction_to_mesh.doc create mode 100644 doc/salome/gui/SMESH/input/introduction_to_mesh_python.doc create mode 100644 doc/salome/gui/SMESH/input/length.doc create mode 100644 doc/salome/gui/SMESH/input/length_2d.doc create mode 100644 doc/salome/gui/SMESH/input/max_element_volume_hypo.doc create mode 100644 doc/salome/gui/SMESH/input/merging_elements.doc create mode 100644 doc/salome/gui/SMESH/input/merging_nodes.doc create mode 100644 doc/salome/gui/SMESH/input/mesh_infos.doc create mode 100644 doc/salome/gui/SMESH/input/mesh_through_point.doc create mode 100644 doc/salome/gui/SMESH/input/minimum_angle.doc create mode 100644 doc/salome/gui/SMESH/input/modifying_meshes.doc create mode 100644 doc/salome/gui/SMESH/input/moving_nodes.doc create mode 100644 doc/salome/gui/SMESH/input/netgen_2d_3d_hypo.doc create mode 100644 doc/salome/gui/SMESH/input/numbering.doc create mode 100644 doc/salome/gui/SMESH/input/pattern_mapping.doc create mode 100644 doc/salome/gui/SMESH/input/prism_3d_algo.doc create mode 100644 doc/salome/gui/SMESH/input/projection_algos.doc create mode 100644 doc/salome/gui/SMESH/input/quality_controls.doc create mode 100644 doc/salome/gui/SMESH/input/radial_prism_algo.doc create mode 100644 doc/salome/gui/SMESH/input/removing_nodes_and_elements.doc create mode 100644 doc/salome/gui/SMESH/input/renumbering_nodes_and_elements.doc create mode 100644 doc/salome/gui/SMESH/input/revolution.doc create mode 100644 doc/salome/gui/SMESH/input/rotation.doc create mode 100644 doc/salome/gui/SMESH/input/running_mesh_module.doc create mode 100644 doc/salome/gui/SMESH/input/segments_around_vertex_algo.doc create mode 100644 doc/salome/gui/SMESH/input/selection_filter_library.doc create mode 100644 doc/salome/gui/SMESH/input/sewing_meshes.doc create mode 100644 doc/salome/gui/SMESH/input/skew.doc create mode 100644 doc/salome/gui/SMESH/input/smeshpy_interface.doc create mode 100644 doc/salome/gui/SMESH/input/smoothing.doc create mode 100644 doc/salome/gui/SMESH/input/symmetry.doc create mode 100644 doc/salome/gui/SMESH/input/taper.doc create mode 100644 doc/salome/gui/SMESH/input/transforming_meshes.doc create mode 100644 doc/salome/gui/SMESH/input/translation.doc create mode 100644 doc/salome/gui/SMESH/input/transparency.doc create mode 100644 doc/salome/gui/SMESH/input/tui_creating_meshes.doc create mode 100644 doc/salome/gui/SMESH/input/tui_defining_hypotheses.doc create mode 100644 doc/salome/gui/SMESH/input/tui_grouping_elements.doc create mode 100644 doc/salome/gui/SMESH/input/tui_modifying_meshes.doc create mode 100644 doc/salome/gui/SMESH/input/tui_quality_controls.doc create mode 100644 doc/salome/gui/SMESH/input/tui_scripts.doc create mode 100644 doc/salome/gui/SMESH/input/tui_transforming_meshes.doc create mode 100644 doc/salome/gui/SMESH/input/tui_viewing_meshes.doc create mode 100644 doc/salome/gui/SMESH/input/uniting_set_of_triangles.doc create mode 100644 doc/salome/gui/SMESH/input/uniting_two_triangles.doc create mode 100644 doc/salome/gui/SMESH/input/using_operations_on_groups.doc create mode 100644 doc/salome/gui/SMESH/input/viewing_meshes.doc create mode 100644 doc/salome/gui/SMESH/input/viewing_meshes_overview.doc create mode 100644 doc/salome/gui/SMESH/input/volume.doc create mode 100644 doc/salome/gui/SMESH/input/warping.doc delete mode 100755 doc/salome/gui/SMESH/length.htm delete mode 100755 doc/salome/gui/SMESH/merge_elements.htm delete mode 100755 doc/salome/gui/SMESH/mesh.htm delete mode 100755 doc/salome/gui/SMESH/mesh_through_point.htm delete mode 100755 doc/salome/gui/SMESH/modifying_meshes.htm delete mode 100644 doc/salome/gui/SMESH/netgen_2d_and_3d_hypotheses.htm delete mode 100755 doc/salome/gui/SMESH/note1.gif delete mode 100755 doc/salome/gui/SMESH/pattern_mapping.htm create mode 100755 doc/salome/gui/SMESH/pics/dialog.png create mode 100755 doc/salome/gui/SMESH/pics/eleminfo1.png create mode 100755 doc/salome/gui/SMESH/pics/eleminfo2.png delete mode 100755 doc/salome/gui/SMESH/presentation.htm delete mode 100644 doc/salome/gui/SMESH/prism_3d_algorithm.htm delete mode 100644 doc/salome/gui/SMESH/projection_algorithms.htm delete mode 100755 doc/salome/gui/SMESH/quality_controls.htm delete mode 100644 doc/salome/gui/SMESH/radial_prism.htm delete mode 100755 doc/salome/gui/SMESH/revolution.htm delete mode 100755 doc/salome/gui/SMESH/segments_around_vertex_algorithm.htm delete mode 100755 doc/salome/gui/SMESH/selection_filter_library.htm delete mode 100755 doc/salome/gui/SMESH/smesh.log delete mode 100644 doc/salome/gui/SMESH/smesh.py_introduction.htm create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh.html create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Algorithm.html create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Algorithm__inherit__graph.jpg create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__CompositeSegment.html create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__CompositeSegment__inherit__graph.jpg create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Hexahedron.html create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Hexahedron__inherit__graph.jpg create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Netgen.html create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Netgen__inherit__graph.jpg create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Prism3D.html create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Prism3D__inherit__graph.jpg create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Projection1D.html create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Projection1D__inherit__graph.jpg create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Projection2D.html create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Projection2D__inherit__graph.jpg create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Projection3D.html create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Projection3D__inherit__graph.jpg create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Quadrangle.html create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Quadrangle__inherit__graph.jpg create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__RadialPrism3D.html create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__RadialPrism3D__inherit__graph.jpg create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Segment.html create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Segment__Python.html create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Segment__Python__inherit__graph.jpg create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Segment__inherit__graph.jpg create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Tetrahedron.html create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Tetrahedron__inherit__graph.jpg create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Triangle.html create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Triangle__inherit__graph.jpg create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1smeshDC.html create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1smeshDC__inherit__graph.jpg delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh.html delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Algorithm.html delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Algorithm__inherit__graph.jpg delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__CompositeSegment.html delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__CompositeSegment__inherit__graph.jpg delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Hexahedron.html delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Hexahedron__inherit__graph.jpg delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Netgen.html delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Netgen__inherit__graph.jpg delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Prism3D.html delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Prism3D__inherit__graph.jpg delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Projection1D.html delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Projection1D__inherit__graph.jpg delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Projection2D.html delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Projection2D__inherit__graph.jpg delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Projection3D.html delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Projection3D__inherit__graph.jpg delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Quadrangle.html delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Quadrangle__inherit__graph.jpg delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__RadialPrism3D.html delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__RadialPrism3D__inherit__graph.jpg delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Segment.html delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Segment__Python.html delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Segment__Python__inherit__graph.jpg delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Segment__inherit__graph.jpg delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Tetrahedron.html delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Tetrahedron__inherit__graph.jpg delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Triangle.html delete mode 100644 doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Triangle__inherit__graph.jpg create mode 100644 doc/salome/gui/SMESH/smeshpy_doc/namespacesmeshDC.html create mode 100755 doc/salome/gui/SMESH/static/doxygen.css create mode 100755 doc/salome/gui/SMESH/static/footer.html create mode 100755 doc/salome/gui/SMESH/static/header.html delete mode 100755 doc/salome/gui/SMESH/texture_horiz_ltbluebubbles.jpg delete mode 100755 doc/salome/gui/SMESH/transforming_meshes.htm delete mode 100755 doc/salome/gui/SMESH/transparency.htm delete mode 100755 doc/salome/gui/SMESH/viewing_meshes.htm delete mode 100755 doc/salome/gui/SMESH/volume.htm delete mode 100755 doc/salome/gui/SMESH/webhelp.cab delete mode 100755 doc/salome/gui/SMESH/webhelp.jar delete mode 100755 doc/salome/gui/SMESH/whcsh_home.htm delete mode 100755 doc/salome/gui/SMESH/whcshdata.htm delete mode 100755 doc/salome/gui/SMESH/whd_dpns.htm delete mode 100755 doc/salome/gui/SMESH/whd_hide0.gif delete mode 100755 doc/salome/gui/SMESH/whd_hide1.gif delete mode 100755 doc/salome/gui/SMESH/whd_hide2.gif delete mode 100755 doc/salome/gui/SMESH/whd_next0.gif delete mode 100755 doc/salome/gui/SMESH/whd_next1.gif delete mode 100755 doc/salome/gui/SMESH/whd_next2.gif delete mode 100755 doc/salome/gui/SMESH/whd_nvp10.htm delete mode 100755 doc/salome/gui/SMESH/whd_nvp20.htm delete mode 100755 doc/salome/gui/SMESH/whd_prev0.gif delete mode 100755 doc/salome/gui/SMESH/whd_prev1.gif delete mode 100755 doc/salome/gui/SMESH/whd_prev2.gif delete mode 100755 doc/salome/gui/SMESH/whd_show0.gif delete mode 100755 doc/salome/gui/SMESH/whd_show1.gif delete mode 100755 doc/salome/gui/SMESH/whd_show2.gif delete mode 100755 doc/salome/gui/SMESH/whd_sync0.gif delete mode 100755 doc/salome/gui/SMESH/whd_sync1.gif delete mode 100755 doc/salome/gui/SMESH/whd_sync2.gif delete mode 100755 doc/salome/gui/SMESH/whd_tab0.gif delete mode 100755 doc/salome/gui/SMESH/whd_tab1.gif delete mode 100755 doc/salome/gui/SMESH/whd_tab2.gif delete mode 100755 doc/salome/gui/SMESH/whd_tab3.gif delete mode 100755 doc/salome/gui/SMESH/whd_tab4.gif delete mode 100755 doc/salome/gui/SMESH/whd_tab5.gif delete mode 100755 doc/salome/gui/SMESH/whd_tab6.gif delete mode 100755 doc/salome/gui/SMESH/whd_tab7.gif delete mode 100755 doc/salome/gui/SMESH/whd_tab8.gif delete mode 100755 doc/salome/gui/SMESH/whd_tabs.htm delete mode 100755 doc/salome/gui/SMESH/whd_toc1.gif delete mode 100755 doc/salome/gui/SMESH/whd_toc2.gif delete mode 100755 doc/salome/gui/SMESH/whd_toc3.gif delete mode 100755 doc/salome/gui/SMESH/whd_topic.xml delete mode 100755 doc/salome/gui/SMESH/whd_wbsh0.gif delete mode 100755 doc/salome/gui/SMESH/whd_wbsh1.gif delete mode 100755 doc/salome/gui/SMESH/whd_wbsh2.gif delete mode 100755 doc/salome/gui/SMESH/whfbody.htm delete mode 100755 doc/salome/gui/SMESH/whfdhtml.htm delete mode 100755 doc/salome/gui/SMESH/whfform.htm delete mode 100755 doc/salome/gui/SMESH/whfhost.js delete mode 100755 doc/salome/gui/SMESH/whform.js delete mode 100755 doc/salome/gui/SMESH/whframes.js delete mode 100755 doc/salome/gui/SMESH/whgbody.htm delete mode 100755 doc/salome/gui/SMESH/whgdef.htm delete mode 100755 doc/salome/gui/SMESH/whgdhtml.htm delete mode 100755 doc/salome/gui/SMESH/whghost.js delete mode 100755 doc/salome/gui/SMESH/whhost.js delete mode 100755 doc/salome/gui/SMESH/whibody.htm delete mode 100755 doc/salome/gui/SMESH/whidhtml.htm delete mode 100755 doc/salome/gui/SMESH/whiform.htm delete mode 100755 doc/salome/gui/SMESH/whihost.js delete mode 100755 doc/salome/gui/SMESH/whlang.js delete mode 100755 doc/salome/gui/SMESH/whmozemu.js delete mode 100755 doc/salome/gui/SMESH/whmsg.js delete mode 100755 doc/salome/gui/SMESH/whnjs.htm delete mode 100755 doc/salome/gui/SMESH/whphost.js delete mode 100755 doc/salome/gui/SMESH/whproj.htm delete mode 100755 doc/salome/gui/SMESH/whproj.js delete mode 100755 doc/salome/gui/SMESH/whproj.xml delete mode 100755 doc/salome/gui/SMESH/whproxy.js delete mode 100755 doc/salome/gui/SMESH/whres.xml delete mode 100755 doc/salome/gui/SMESH/whskin_blank.htm delete mode 100755 doc/salome/gui/SMESH/whskin_homepage.htm delete mode 100755 doc/salome/gui/SMESH/whskin_info.htm delete mode 100755 doc/salome/gui/SMESH/whskin_pickup.htm delete mode 100755 doc/salome/gui/SMESH/whskin_tw.htm delete mode 100755 doc/salome/gui/SMESH/whstart.js delete mode 100755 doc/salome/gui/SMESH/whstub.js delete mode 100755 doc/salome/gui/SMESH/whtdhtml.htm delete mode 100755 doc/salome/gui/SMESH/whthost.js delete mode 100755 doc/salome/gui/SMESH/whtopic.js delete mode 100755 doc/salome/gui/SMESH/whutils.js delete mode 100755 doc/salome/gui/SMESH/whver.js create mode 100755 resources/mesh_whatis.png create mode 100644 src/SMDS/SMDS_MemoryLimit.cxx create mode 100644 src/SMDS/SMDS_MeshInfo.hxx create mode 100755 src/SMESHGUI/SMESHGUI_WhatIsDlg.cxx create mode 100755 src/SMESHGUI/SMESHGUI_WhatIsDlg.h create mode 100644 src/SMESH_SWIG/ex24_cylinder.py create mode 100644 src/SMESH_SWIG/smeshDC.py create mode 100644 src/SMESH_SWIG_WITHIHM/Makefile.am rename src/{SMESH_SWIG => SMESH_SWIG_WITHIHM}/libSMESH_Swig.i (100%) create mode 100644 src/StdMeshers/StdMeshers_UseExisting_1D2D.cxx create mode 100644 src/StdMeshers/StdMeshers_UseExisting_1D2D.hxx create mode 100644 src/StdMeshers_I/StdMeshers_UseExisting_1D2D_i.cxx create mode 100644 src/StdMeshers_I/StdMeshers_UseExisting_1D2D_i.hxx diff --git a/adm_local/unix/config_files/check_SMESH.m4 b/adm_local/unix/config_files/check_SMESH.m4 index f1dbf22f1..5518cfa24 100644 --- a/adm_local/unix/config_files/check_SMESH.m4 +++ b/adm_local/unix/config_files/check_SMESH.m4 @@ -28,7 +28,9 @@ if test "x$SMESH_DIR" == "x" ; then 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` @@ -38,7 +40,9 @@ if test "x$SMESH_DIR" == "x" ; then # 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}) diff --git a/build_configure b/build_configure index 9a1d6494b..66f991e57 100755 --- a/build_configure +++ b/build_configure @@ -12,6 +12,7 @@ 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 @@ -28,12 +29,26 @@ 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 -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 ######################################################################## @@ -56,23 +71,28 @@ fi cd ${CONF_DIR} ABS_CONF_DIR=`pwd` +####################################################################### +# 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/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 +#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 +#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 # ____________________________________________________________________ @@ -84,7 +104,18 @@ for deprecated in ac_cc_warnings.m4 ac_cxx_partial_specialization.m4 \ # autom4te.cache (directory) echo "====================================================== aclocal" -aclocal -I adm_local/unix/config_files -I salome_adm/unix/config_files || exit 1 +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 + 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 # ____________________________________________________________________ # libtoolize creates some configuration files (ltmain.sh, diff --git a/configure.ac b/configure.ac index b4585ccc7..63eca7ec2 100644 --- a/configure.ac +++ b/configure.ac @@ -9,18 +9,13 @@ # -AC_INIT([Salome2 Project SMESH module], [4.0.0], [gboulant@CS], [salome]) +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 -PACKAGE=salome -AC_SUBST(PACKAGE) - -VERSION=4.0.0 -XVERSION=0x040000 -AC_SUBST(VERSION) +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.) @@ -199,14 +194,30 @@ echo ENABLE_PTHREADS -if test "x${GUI_DISABLE_CORBA}" != "xyes" ; then +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 omniORB +echo testing msg2qm echo --------------------------------------------- echo -CHECK_OMNIORB +CHECK_MSG2QM + +fi + +if test "x${GUI_DISABLE_CORBA}" != "xyes" ; then + echo + echo --------------------------------------------- + echo testing omniORB + echo --------------------------------------------- + echo + + CHECK_OMNIORB dnl echo dnl echo --------------------------------------------- @@ -216,58 +227,74 @@ dnl echo dnl CHECK_MICO -echo -echo --------------------------------------------- -echo default ORB : omniORB -echo --------------------------------------------- -echo + echo + echo --------------------------------------------- + echo default ORB : omniORB + echo --------------------------------------------- + echo -DEFAULT_ORB=omniORB + DEFAULT_ORB=omniORB -echo -echo --------------------------------------------- -echo testing Corba -echo --------------------------------------------- -echo + echo + echo --------------------------------------------- + echo testing Corba + echo --------------------------------------------- + echo -CHECK_CORBA + CHECK_CORBA -AC_SUBST_FILE(CORBA) -corba=make_$ORB -CORBA=adm_local/unix/$corba + AC_SUBST_FILE(CORBA) + corba=make_$ORB + CORBA=adm_local/unix/$corba fi -echo -echo --------------------------------------------- -echo testing openGL -echo --------------------------------------------- -echo -CHECK_OPENGL -echo -echo --------------------------------------------- -echo testing QT -echo --------------------------------------------- -echo +if test "${SMESH_WITH_GUI}" = "yes"; then + echo + echo --------------------------------------------- + echo testing openGL + echo --------------------------------------------- + echo -CHECK_QT + CHECK_OPENGL -echo -echo --------------------------------------------- -echo testing msg2qm -echo --------------------------------------------- -echo + echo + echo --------------------------------------------- + echo testing QT + echo --------------------------------------------- + echo -CHECK_MSG2QM + CHECK_QT -echo -echo --------------------------------------------- -echo testing VTK -echo --------------------------------------------- -echo + echo + echo --------------------------------------------- + echo testing VTK + echo --------------------------------------------- + echo + + CHECK_VTK -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 --------------------------------------------- @@ -293,6 +320,8 @@ echo CHECK_CAS +if test "${SMESH_WITH_GUI}" = "yes"; then + echo echo --------------------------------------------- echo Testing qwt @@ -301,6 +330,8 @@ echo CHECK_QWT +fi + echo echo --------------------------------------------- echo Testing html generators @@ -309,26 +340,6 @@ 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 @@ -362,7 +373,13 @@ 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 @@ -443,6 +460,8 @@ AC_OUTPUT([ \ ./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 \ @@ -463,6 +482,7 @@ AC_OUTPUT([ \ ./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 \ diff --git a/doc/salome/gui/Makefile.am b/doc/salome/gui/Makefile.am index f1bbb6dcc..e7c5dc8ae 100644 --- a/doc/salome/gui/Makefile.am +++ b/doc/salome/gui/Makefile.am @@ -25,9 +25,16 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am EXTRA_DIST+=SMESH +doxygen=@DOXYGEN@ + usr_docs: - cp -fr $(srcdir)/SMESH ./ - -find $(PWD) -name CVS -prune -exec rm -rf {} \; + cd ./SMESH; \ + echo "Processing smeshDC.py file: "; \ + $(doxygen) ./doxyfile_py; \ + sed 's|../../../share/salome|$(top_srcdir)|' ./doxyfile > ./doxyfile1; \ + mv -f doxyfile1 doxyfile; \ + echo "Running doxygen in directory: "`pwd`; \ + $(doxygen) ./doxyfile; docs: usr_docs @@ -42,3 +49,10 @@ install-data-local: usr_docs 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/SMESH/about_viewing_meshes.htm b/doc/salome/gui/SMESH/about_viewing_meshes.htm deleted file mode 100755 index fcddab5db..000000000 --- a/doc/salome/gui/SMESH/about_viewing_meshes.htm +++ /dev/null @@ -1,174 +0,0 @@ - - - - - -About viewing meshes - - - - - - - - - - - - -

Viewing meshes

- -

After definition of algorithms and hypotheses a new mesh is listed in - the Object Browser. Right-click on it and select Compute - the mesh will be automatically - displayed in the VTK 3D Viewer. - Alternatively click Display only - to hide all other objects at the same time.

- -

 

- -

VTK 3D - Viewer is detailly described in the documentation on GUI - module.

- -

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.

- -

  

- -

- -

 

- - - -

 

- - - - 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 index b4d5067d2..000000000 --- a/doc/salome/gui/SMESH/adding_quadratic_nodes_and_elements.htm +++ /dev/null @@ -1,124 +0,0 @@ - - - - - -Adding Quadratic Nodes and Elements - - - - - - - - - - -

Adding Quadratic Elements

- -

MESH modules allows you to work with Quadratic - Elements.

- -

Quadratic Edge in not a straight but a broken line and can be defined - by three points: first, middle and last. All more complex Quadratic - Elements differ from ordinary ones in that they consist of Quadratic - Edges.

- -

To - add a quadratic element to your mesh:

- -

1. Select your mesh in the Object Browser - or in the 3D viewer.

- -

2. From the Modification - menu choose the Add item - and select one of the following:

- -

- -

To create any Quadratic - Element 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 Corner Nodes - (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 OK or Apply - button to add the element to the mesh.

- -

 

- -

Reverse - button for Quadratic Edges switches the first and the last nodes. For all other elements it reverses the element. -

- -

 

- - - - diff --git a/doc/salome/gui/SMESH/aspect_ratio_3d.htm b/doc/salome/gui/SMESH/aspect_ratio_3d.htm deleted file mode 100755 index bd1d7ddfc..000000000 --- a/doc/salome/gui/SMESH/aspect_ratio_3d.htm +++ /dev/null @@ -1,203 +0,0 @@ - - - - - -Aspect ratio 3D - - - - - - - - - - - - - -

Aspect ratio 3D

- -

- -

 

- -

The Aspect Ratio 3D mesh quality criterion calculates - the same parameter as the Aspect ratio - criterion, but it is applied to 3D mesh elements: tetrahedrons, pentahedrons, - hexahedrons, etc.  

- -

 

- - - -

 

- -

 

- -

,

- -

 

- -

where SK is the sum of surfaces of the faces - of К and VK is the volume of К :

- -

 

- -

T

- -

 

- - - -

, where Qi represents the value of Qk for all possible simplexes (of the - same dimension as the element) that compose the element.

- -

For example, a hexahedron is split in 6 tetrahedrons, the Aspect - ratio 3D is calculated for each of them, then the greatest Qk is considered to be the  Aspect ratio 3D - criterion for the whole  hexahedron.

- -

- -

 

- -

To apply the Aspect Ratio 3D quality criterion to your mesh:

- -

 

- -

1. Display your mesh in the viewer.

- -

 

- -

2. Choose Controls - > Aspect Ratio 3D or click button of the toolbar. - Your mesh will be displayed in the viewer with its elements colored according - to the applied mesh quality control criterion:

- -

 

- -

See Also - a sample TUI Script of an Aspect - Ratio 3D quality control operation.  

- -

 

- -

 

- -

 

- -

 

- - - - 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 index 8ad86b523..000000000 --- a/doc/salome/gui/SMESH/borders_at_multi-connection.htm +++ /dev/null @@ -1,121 +0,0 @@ - - - - - -Borders at multi-connection - - - - - - - - - - - - - -

Borders at multi-connection

- -

This mesh quality control highlights borders of faces - consisting of edges belonging to several faces. The amount of faces is - specified by user.

- -

 

- -

- -

 

- -

In this picture the borders at multi-connection are displayed in blue.

- -

 

- -

See Also - a sample TUI Script of a Borders - at Multi-Connection quality control operation.  

- -

 

- - - - 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 index 2e9e180c0..000000000 --- a/doc/salome/gui/SMESH/borders_at_multiconnection_2d.htm +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Borders at multiconnection 2D - - - - - - - - - - - - - -

Borders at multi-connection 2D

- -

This mesh quality control highlights borders of elements - of mesh, consisting of edges belonging to several elements of mesh.

- -

 

- -

        

- -

 

- -

See Also - a sample TUI Script of a Borders - at Multi-Connection quality control operation.  

- -

 

- - - - diff --git a/doc/salome/gui/SMESH/building_compounds.htm b/doc/salome/gui/SMESH/building_compounds.htm deleted file mode 100755 index 475759694..000000000 --- a/doc/salome/gui/SMESH/building_compounds.htm +++ /dev/null @@ -1,160 +0,0 @@ - - - - - -Building Compounds - - - - - - - - - - - -

Building Compounds

- -

Compound Mesh is a combination of several meshes.

- -

 To - Build a compound:

- -

From the Mesh - menu select Build Compound or - click button in the toolbar. The following dialog box will - appear:

- -

- - - -

Example:

- -

- -

 

- - - - diff --git a/doc/salome/gui/SMESH/clipping.htm b/doc/salome/gui/SMESH/clipping.htm deleted file mode 100755 index dec479c99..000000000 --- a/doc/salome/gui/SMESH/clipping.htm +++ /dev/null @@ -1,140 +0,0 @@ - - - - - -Clipping - - - - - - - - - - - - -

Clipping

- -

Using this menu you can create cross-section views (clipping planes) - of your mesh.

- -

 

- -

To start, click on the New button.

- -

 

- -

- -

 

- -

Now you can define the parameters of your cross-section: Orientation -  (X-Y, X-Z - or Y-Z); Distance between the - opposite extremities of the object, if - it is set to 0.5 the object is split in two halves; and Rotation - (in angle degrees) around X (Y to Z) - and around Y (X to Z). - If the Show preview button is - on, you can see the clipping plane in the Object - window.

- -

 

- -

- -

 

- -

If the - Auto Apply button is on, you can preview - the cross-section in the Object window

- -

 

- -

- -

 

- -

To get - a new object from Clipping, click - Ok.

- -

 

- -

 

- - - - diff --git a/doc/salome/gui/SMESH/constructing_meshes.htm b/doc/salome/gui/SMESH/constructing_meshes.htm deleted file mode 100755 index a643f436f..000000000 --- a/doc/salome/gui/SMESH/constructing_meshes.htm +++ /dev/null @@ -1,448 +0,0 @@ - - - - - -Constructing Meshes - - - - - - - - - - - -

Creating Meshes

- -

First of all see Example - of 3d mesh generation, which is an example of good python script style - for Mesh module.

- -

Other examples of python - scripts will be also updated soon to use smesh package instead of direct - usage of idl interface.

- -

Construction of a Mesh

- -

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 -

- -

 

- -

 

- -

Construction of a Submesh

- -

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()

- -

 

- -

Editing of a mesh

- -

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)

- -

 

- -

Export of a Mesh

- -

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)

- - - - diff --git a/doc/salome/gui/SMESH/cshdat_robohelp.htm b/doc/salome/gui/SMESH/cshdat_robohelp.htm deleted file mode 100755 index 4a4ee57e1..000000000 --- a/doc/salome/gui/SMESH/cshdat_robohelp.htm +++ /dev/null @@ -1,258 +0,0 @@ - - -Mesh Module Reference Manual - - - - - - - - - - - - - - - - - diff --git a/doc/salome/gui/SMESH/cshdat_webhelp.htm b/doc/salome/gui/SMESH/cshdat_webhelp.htm deleted file mode 100755 index db3b49a38..000000000 --- a/doc/salome/gui/SMESH/cshdat_webhelp.htm +++ /dev/null @@ -1,251 +0,0 @@ - - -Mesh Module Reference Manual - - - - - - - - - - - - - - - - - diff --git a/doc/salome/gui/SMESH/default.css b/doc/salome/gui/SMESH/default.css deleted file mode 100755 index 1f8d6d772..000000000 --- a/doc/salome/gui/SMESH/default.css +++ /dev/null @@ -1,101 +0,0 @@ -BODY { - background-color:#ffffff; - font-family:"Times New Roman" , serif; } -H1 { - font-weight:bold; - font-size:24.0pt; } -LI.kadov-H1 { - font-weight:bold; - font-size:24.0pt; } -H2 { - font-weight:bold; - font-size:18.0pt; } -LI.kadov-H2 { - font-weight:bold; - font-size:18.0pt; } -H3 { - font-weight:bold; - font-size:14.0pt; } -LI.kadov-H3 { - font-weight:bold; - font-size:14.0pt; } -H4 { - font-weight:bold; - font-size:12.0pt; } -LI.kadov-H4 { - font-weight:bold; - font-size:12.0pt; } -H5 { - font-weight:bold; - font-size:10.0pt; } -LI.kadov-H5 { - font-weight:bold; - font-size:10.0pt; } -H6 { - font-weight:bold; - font-size:8.0pt; } -LI.kadov-H6 { - font-weight:bold; - font-size:8.0pt; } -P { - font-size:12.0pt; - margin-top:0pt; - margin-bottom:0pt; } -LI.kadov-P { - font-size:12.0pt; } -A.expandspot { - color:#008000; - cursor:hand; - font-style:italic; - x-text-underline:off; - x-text-overline:off; - x-text-line-through:off; - text-decoration:none none none; } -SPAN.expandtext { - font-style:italic; - font-weight:normal; - color:#ff0000; } -A.dropspot { - cursor:hand; - color:#008000; - font-style:italic; - x-text-underline:off; - x-text-overline:off; - x-text-line-through:off; - text-decoration:none none none; } -A.glossterm { - color:#800000; - cursor:hand; - font-style:italic; - x-text-underline:off; - x-text-overline:off; - x-text-line-through:off; - text-decoration:none none none; } -SPAN.glosstext { - font-style:italic; - font-weight:normal; - color:#0000ff; } -OL { - margin-top:0px; - margin-bottom:0px; } -UL { - margin-top:0px; - margin-bottom:0px; } -A:active { } -A:hover { - x-text-underline:Off; - text-decoration:none; } -A:link { - x-text-underline:Off; - text-decoration:none; } -A:visited { - x-text-underline:Off; - text-decoration:none; } -P.TODO { - font-weight:normal; - font-style:italic; - font-family:"Arial Black" , sans-serif; } -LI.kadov-P-CTODO { - font-weight:normal; - font-style:italic; - font-family:"Arial Black" , sans-serif; } diff --git a/doc/salome/gui/SMESH/default_ns.css b/doc/salome/gui/SMESH/default_ns.css deleted file mode 100755 index 46e8b0018..000000000 --- a/doc/salome/gui/SMESH/default_ns.css +++ /dev/null @@ -1,118 +0,0 @@ -BODY { - background-color:#ffffff; - font-family:"Times New Roman" , serif; } -H1 { - font-weight:bold; - font-size:24.0pt; - font-family:"Times New Roman" , serif; } -LI.kadov-H1 { - font-weight:bold; - font-size:24.0pt; } -H2 { - font-weight:bold; - font-size:18.0pt; - font-family:"Times New Roman" , serif; } -LI.kadov-H2 { - font-weight:bold; - font-size:18.0pt; } -H3 { - font-weight:bold; - font-size:14.0pt; - font-family:"Times New Roman" , serif; } -LI.kadov-H3 { - font-weight:bold; - font-size:14.0pt; } -H4 { - font-weight:bold; - font-size:12.0pt; - font-family:"Times New Roman" , serif; } -LI.kadov-H4 { - font-weight:bold; - font-size:12.0pt; } -H5 { - font-weight:bold; - font-size:10.0pt; - font-family:"Times New Roman" , serif; } -LI.kadov-H5 { - font-weight:bold; - font-size:10.0pt; } -H6 { - font-weight:bold; - font-size:8.0pt; - font-family:"Times New Roman" , serif; } -LI.kadov-H6 { - font-weight:bold; - font-size:8.0pt; } -P { - font-size:12.0pt; - margin-top:1pt; - margin-bottom:1pt; - font-family:"Times New Roman" , serif; } -LI.kadov-P { - font-size:12.0pt; } -A.expandspot { - color:#008000; - cursor:hand; - font-style:italic; - x-text-underline:off; - x-text-overline:off; - x-text-line-through:off; - text-decoration:none none none; } -SPAN.expandtext { - font-style:italic; - font-weight:normal; - color:#ff0000; } -A.dropspot { - cursor:hand; - color:#008000; - font-style:italic; - x-text-underline:off; - x-text-overline:off; - x-text-line-through:off; - text-decoration:none none none; } -A.glossterm { - color:#800000; - cursor:hand; - font-style:italic; - x-text-underline:off; - x-text-overline:off; - x-text-line-through:off; - text-decoration:none none none; } -SPAN.glosstext { - font-style:italic; - font-weight:normal; - color:#0000ff; } -OL { - margin-top:0px; - margin-bottom:0px; - font-family:"Times New Roman" , serif; } -UL { - margin-top:0px; - margin-bottom:0px; - font-family:"Times New Roman" , serif; } -A:active { } -A:hover { - x-text-underline:Off; - text-decoration:none; } -A:link { - x-text-underline:Off; - text-decoration:none; } -A:visited { - x-text-underline:Off; - text-decoration:none; } -P.TODO { - font-weight:normal; - font-style:italic; - font-family:"Arial Black" , sans-serif; } -LI.kadov-P-CTODO { - font-weight:normal; - font-style:italic; - font-family:"Arial Black" , sans-serif; } -ol ol { - margin-top:1px; } -ol ul { - margin-top:1px; } -ul ul { - margin-top:1px; } -ul ol { - margin-top:1px; } diff --git a/doc/salome/gui/SMESH/defining_hypotheses_tui.htm b/doc/salome/gui/SMESH/defining_hypotheses_tui.htm deleted file mode 100755 index 420dc0a8b..000000000 --- a/doc/salome/gui/SMESH/defining_hypotheses_tui.htm +++ /dev/null @@ -1,883 +0,0 @@ - - - - - -Defining hypotheses TUI - - - - - - - - - - - -

Defining Hypotheses and Algorithms

- -

Defining 1D Hypotheses

- -

1D Arithmetic

- -

 

- -

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()

- -

 

- -

Deflection 1D and Number of Segments

- -

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()

- -

Start and End Length

- -

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()

- -

Average Length

- -

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()

- -

Defining 2D and 3D hypotheses

- -

Maximum Element Area

- -

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() -  

- -

 

- -

Maximum Element Volume

- -

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"

- -

Length from Edges

- -

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()

- -

 

- -

Defining Additional Hypotheses

- -

Propagation

- -

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() -

- -

Defining Meshing Algorithms

- -

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() -

- - - - diff --git a/doc/salome/gui/SMESH/deleting_groups.htm b/doc/salome/gui/SMESH/deleting_groups.htm deleted file mode 100755 index 02a7b47e2..000000000 --- a/doc/salome/gui/SMESH/deleting_groups.htm +++ /dev/null @@ -1,119 +0,0 @@ - - - - - -Deleting Groups - - - - - - - - - - - -

Deleting Groups

- -

To delete a group in the - Main Menu select Mesh - -> Delete Groups and select one or several - groups you wish to delete in the 3D viewer or in the Object Browser.

- -

The selected groups will - be listed in Delete groups with contents - menu. Then click Ok button to remove the selected groups and close the - menu or Apply button to remove them and proceed with the selection.

- -

 

- -

- -

    

- -

 

- -

Please, note that this - operation removes groups with their elements. - To delete a group and leave its elements intact, right-click on the group - in the Object Browser and select Delete - in the pop-up menu or select the group and choose Edit - -> Delete in the Main Menu. -   

- - - - diff --git a/doc/salome/gui/SMESH/display_entity.htm b/doc/salome/gui/SMESH/display_entity.htm deleted file mode 100755 index 51d7d6604..000000000 --- a/doc/salome/gui/SMESH/display_entity.htm +++ /dev/null @@ -1,101 +0,0 @@ - - - - - -Display Entity - - - - - - - - - - - - -

Display Entity

- -

In this submenu you can choose to display only volumes, faces or edges - or combine them.

- -

 

- -

Only Faces                                                  Only - Edges

- -

 

- -

 

- - - - diff --git a/doc/salome/gui/SMESH/doxyfile.in b/doc/salome/gui/SMESH/doxyfile.in new file mode 100755 index 000000000..37ef2d45f --- /dev/null +++ b/doc/salome/gui/SMESH/doxyfile.in @@ -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 = ../../../share/salome/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 index 000000000..ff847e50e --- /dev/null +++ b/doc/salome/gui/SMESH/doxyfile_py.in @@ -0,0 +1,137 @@ +#--------------------------------------------------------------------------- +# 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 = NO +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 = NO +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 + +#--------------------------------------------------------------------------- +#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 +HIDE_UNDOC_RELATIONS = NO +HAVE_DOT = YES +CLASS_GRAPH = YES +COLLABORATION_GRAPH = NO +GROUP_GRAPHS = NO +UML_LOOK = NO +TEMPLATE_RELATIONS = YES +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = NO +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +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 index 8d61adcdc..000000000 --- a/doc/salome/gui/SMESH/ehelp.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - WebSearch - - \ 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 index 7bcb24993..000000000 --- a/doc/salome/gui/SMESH/ehlpdhtm.js +++ /dev/null @@ -1,4239 +0,0 @@ -// eHelp® Corporation Dynamic HTML JavaScript -// Copyright© 1998-2003 eHelp® Corporation.All rights reserved. -// Version=4.82 - -// Warning:Do not modify this file.It is generated by RoboHELP® and changes will be overwritten. - -//// Segment Begin -- (JavaScript 1.0) - -/// Section Begin - General and relative topics(JavaScript 1.0) - -//{{HH_SYMBOL_SECTION -var HH_ChmFilename = ""; -var HH_WindowName = ""; -var HH_GlossaryFont = ""; -var HH_Glossary = ""; -var HH_Avenue = ""; -var HH_ActiveX = false; -//}}HH_SYMBOL_SECTION - -//Begin to support previous generic parameters -//Get the information about the browser. -var gstrBsAgent = navigator.userAgent.toLowerCase(); -var gnBsVer = parseInt(navigator.appVersion); - -var gbBsOpera = (gstrBsAgent.indexOf('opera') != -1); -var gbBsKonqueror = (gstrBsAgent.indexOf('konqueror') != -1); -var gbBsSafari = (gstrBsAgent.indexOf('safari') != -1); -var gbBsIE = (gstrBsAgent.indexOf('msie') != -1) && !gbBsOpera && !gbBsKonqueror && !gbBsSafari; -var gbBsNS = (gstrBsAgent.indexOf('mozilla') != -1) && ((gstrBsAgent.indexOf('spoofer') == -1) && (gstrBsAgent.indexOf('compatible') == -1)) && !gbBsOpera && !gbBsKonqueror && !gbBsSafari; - -var gbBsMac = (gstrBsAgent.indexOf('mac') != -1); -var gbBsWindows = ((gstrBsAgent.indexOf('win') != -1) || (gstrBsAgent.indexOf('16bit') != -1)); -var gbBsSunOS = (gstrBsAgent.indexOf("sunos") != -1); - -var gbBsIE3Before = ((gbBsIE) && (gnBsVer <= 2)); -var gbBsNS3Before = ((gbBsNS) && (gnBsVer <= 3)); - -var gbBsNS2 = ((gbBsNS) && (gnBsVer <= 2)); -var gbBsNS3 = ((gbBsNS) && (gnBsVer == 3)); -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))); -var gbBsIE302 = ((gbBsIE) && (gnBsVer == 2) && (gstrBsAgent.indexOf("3.02") != -1)); - -var gbBsNS4 = ((gbBsNS) && (gnBsVer >= 4)); -var gbBsNS6 = ((gbBsNS) && (gnBsVer >= 5)); -var gbBsNS7 = false; - -var gbBsIE4 = ((gbBsIE) && (gnBsVer >= 4)); -var gbBsIE5 = false; -var gbBsIE55 = false; - -var gbBsOpera6 = false; -var gbBsOpera7 = false; - -var gbBsKonqueror3 = false; - - - -gbBsIE = (navigator.appName.indexOf("Microsoft") != -1) && !gbBsOpera && !gbBsKonqueror && !gbBsSafari;; -if (gbBsIE) -{ - if (parseInt(navigator.appVersion) >= 4) { - gbBsIE4 = true; - if (gbBsIE4) { - var nPos = gstrBsAgent.indexOf("msie"); - var strIEversion = gstrBsAgent.substring(nPos + 5); - var nVersion = parseFloat(strIEversion); - if (nVersion >= 5) - gbBsIE5 = true; - if (nVersion >= 5.5) - gbBsIE55 = true; - } - } -} -if (gbBsNS6) -{ - var nPos=gstrBsAgent.indexOf("gecko"); - if(nPos!=-1) - { - var nPos2=gstrBsAgent.indexOf("/", nPos); - if(nPos2!=-1) - { - var nVersion=parseFloat(gstrBsAgent.substring(nPos2+1)); - if (nVersion>=20020823) - gbBsNS7=true; - } - } -} -if (gbBsOpera) -{ - var nPos = gstrBsAgent.indexOf("opera"); - if(nPos!=-1) - { - var nVersion = parseFloat(gstrBsAgent.substring(nPos+6)); - if (nVersion >= 6) - { - gbBsOpera6=true; - if (nVersion >=7) - gbBsOpera7=true; - } - } -} -if (gbBsKonqueror) -{ - var nPos = gstrBsAgent.indexOf("konqueror"); - if(nPos!=-1) - { - var nVersion = parseFloat(gstrBsAgent.substring(nPos+10)); - if (nVersion >= 3) - { - gbBsKonqueror3=true; - } - } -} - -function insertAdjacentHTML(obj, where, htmlStr) -{ - if (gbBsIE || gbBsOpera7) - { - obj.insertAdjacentHTML(where, htmlStr); - } - else if (gbBsNS6 || gbBsSafari) - { - var r = obj.ownerDocument.createRange(); - r.setStartBefore(obj); - var parsedHTML = r.createContextualFragment(htmlStr); - - switch (where){ - case 'beforeBegin': - obj.parentNode.insertBefore(parsedHTML,obj); - break; - case 'afterBegin': - obj.insertBefore(parsedHTML,obj.firstChild); - break; - case 'beforeEnd': - obj.appendChild(parsedHTML); - break; - case 'afterEnd': - if (obj.nextSibling){ - obj.parentNode.insertBefore(parsedHTML,obj.nextSibling); - } else { - obj.parentNode.appendChild(parsedHTML); - } - break; - } - } -} - -// Utilities functions. -function BsscHasExtJs() -{ - if( gbBsIE3Before || gbBsNS3Before) - return false; - return true; -} - -// Register event handler -var gBsOnLoads = new Array(); // An array holds all the onload event handler. -var gBsOnClicks = new Array(); // An array holds all the onClick event handler. -var gBsOnUnLoads = new Array(); // An array holds all the OnUnLoad event handler. -var gBsOnMouseOvers = new Array(); // An array holds all the OnMouseOver event handler. -var gBsOnMouseOuts = new Array(); // An array holds all the OnMouseOut event handler. - -var gbOrignalOnMouseDown = null; - -function BsscRegisterOnLoad(funcHandler) -{ - var nLength = gBsOnLoads.length; - gBsOnLoads[nLength] = funcHandler; -} - -function BsscRegisterOnClick(funcHandler) -{ - var nLength = gBsOnClicks.length; - gBsOnClicks[nLength] = funcHandler; -} - -function BsscRegisterOnUnLoad(funcHandler) -{ - var nLength = gBsOnUnLoads.length; - gBsOnUnLoads[nLength] = funcHandler; -} - -function BsscRegisterOnMouseOver(funcHandler) -{ - var nLength = gBsOnMouseOvers.length; - gBsOnMouseOvers[nLength] = funcHandler; -} - -function BsscRegisterOnMouseOut(funcHandler) -{ - var nLength = gBsOnMouseOuts.length; - gBsOnMouseOuts[nLength] = funcHandler; -} - -function BsGeneralOnLoad() -{ - if (!gbBsIE4 && !gbBsNS4) - return; - - // Make everything visible in navigator - if (gbBsNS4 && !gbBsNS6) { - // Make some special effects items visible - for (var iLayer = 0; iLayer < document.layers.length; iLayer++) { - document.layers[iLayer].visibility = "show"; - document.layers[iLayer].left = 0; - } - } -} - -// If resize the netscape browser, need to reload it. -function BsReDo() -{ - if (innerWidth != origWidth || innerHeight != origHeight) - location.reload(); -} -// End of the local functions. - -// The following functions are used by the html files. -function BSSCOnLoad() -{ - if( !BsscHasExtJs() ) - return; - for (var nElement = gBsOnLoads.length - 1; nElement >= 0; nElement--) - gBsOnLoads[nElement](); -} - -function BSSCOnClick() -{ - if (!BsscHasExtJs()) return; - - for (var nElement = gBsOnClicks.length - 1; nElement >= 0; nElement--) - gBsOnClicks[nElement](); -} - -function BSSCOnUnload() -{ - if (!BsscHasExtJs()) return; - for (var nElement = gBsOnUnLoads.length - 1; nElement >= 0; nElement--) - gBsOnUnLoads[nElement](); -} - -function BSSCOnMouseOver() -{ - if (!BsscHasExtJs()) return; - for (var nElement = gBsOnMouseOvers.length - 1; nElement >= 0; nElement--) - gBsOnMouseOvers[nElement](); -} - -function BSSCOnMouseOut() -{ - if (!BsscHasExtJs()) return; - for (var nElement = gBsOnMouseOuts.length - 1; nElement >= 0; nElement--) - { - gBsOnMouseOuts[nElement](); - } -} -// End of invocation of the event handle functions. - -// Add the GereralOnLoad to the onload array. -if (typeof(BsscRegisterOnLoad) != "undefined") -{ - BsscRegisterOnLoad(BsGeneralOnLoad); -} -if (gbBsNS4&&!gbBsNS6) { - origWidth = innerWidth; - origHeight = innerHeight; - onresize = BsReDo; -} -//End to support previous generic parameters - -//Begin to support previous HHActiveX invoking -function BsHHActivateComponents() -{ - if( HH_ActiveX && (HH_ChmFilename != "") && ((self == top) || (self == top.frames[0]))) - { - var objBody = getElementsByTag(document,"BODY")[0]; - if( typeof(objBody) == "object" ) - { - insertAdjacentHTML(objBody, "beforeEnd", ''); - if (HHComponentActivator.object) - HHComponentActivator.Activate(HH_ChmFilename, HH_WindowName, HH_GlossaryFont, HH_Glossary, HH_Avenue); - } - } -} - -function BsHHActivXOnLoad() -{ - if( gbBsIE4 ) - BsHHActivateComponents(); -} - -if( typeof(BsscRegisterOnLoad) != "undefined" ) -{ - BsscRegisterOnLoad(BsHHActivXOnLoad); -} -//End to support previous HHActiveX invoking - -//Begin to support previous relative topics -//If webHelp needs Related Topics DHTMLcode, it's supposed to add it here -var gbPopupMenuTimeoutExpired = false; -var gbInPopupMenu = false; -var gbPopupMenuTopicList = null; -var gOlddocumentClick = null; - -////////////////////////////////////////////////////////////////////////////////////////// -// -// Popup Menu code -// -////////////////////////////////////////////////////////////////////////////////////////// - -var g_bIsPopupMenuInit = false; -function _WritePopupMenuLayer() -{ - if (!g_bIsPopupMenuInit) - { - if (gbBsNS4&&!gbBsNS6) { -//Do not try to write ininle styles for NS! NS can not handle it and will not stop downloading the html page... - document.write("
"); - } else{ - document.write(""); - if (!(gbBsNS4&&!gbBsNS6)) { - document.write(""); - } - } - g_bIsPopupMenuInit = true; - } -} - -//Seek for the bsscright frame -function _SeekFrameByName( cRoot, strName ) -{ - if( cRoot == null ) return null; - if( cRoot.frames == null ) return null; - if( cRoot.frames[strName] != null ) return cRoot.frames[strName]; - for (var i=0; i'; - } else { - strMenu += '' + gbPopupMenuTopicList[fn_arguments[i]].strTitle + ''; - } - strMenu += ''; - - if (isNaN(fn_arguments[i]) || (gbPopupMenuTopicList == null)) { - i += 2; - } else { - i += 1; - } - } - strMenu += ""; - - if (gbBsMac) { - // totally hack. because ie5 in mac need something. is one of them. mac is mad. - strMenu +="
"; - } - - var layerPopup = null; - var stylePopup = null; - var nEventX = 0; - var nEventY = 0; - var nWindowWidth = 0; - if (gbBsIE4 || gbBsOpera7) { - - layerPopup = getElement("PopupMenu"); - layerPopup.innerHTML = strMenu; - stylePopup = layerPopup.style; - - _BSPSGetClientSize(); - - // Get the position of the item causing the event (relative to its parent) - nEventX = window.event.clientX; - nEventY = window.event.clientY; - - if (nEventY + layerPopup.scrollHeight + 10 < gBsClientHeight) { - nEventY += document.body.scrollTop + 10; - } else { - nEventY = (document.body.scrollTop + gBsClientHeight) - layerPopup.scrollHeight - 20; - } - stylePopup.top = nEventY; - - var nPopupWidth = layerPopup.scrollWidth; - if (gbBsMac) { - nPopupWidth = 80; // we have no idea how to get the dynamic width of the popup. - } - if (nEventX + nPopupWidth + 20 > gBsClientWidth) { - if (gBsClientWidth - nPopupWidth < 5) { - stylePopup.left = 5; - } else { - stylePopup.left = gBsClientWidth - nPopupWidth - 5; - } - } else { - stylePopup.left = nEventX + document.body.scrollLeft + 20; - } - - stylePopup.visibility = "visible"; - if (!gOlddocumentClick && document.onclick) - gOlddocumentClick = document.onclick; - document.onclick = PopupMenu_HandleClick; - - } else if (gbBsNS6 || gbBsKonqueror3||gbBsSafari) { - layerPopup = getElement("PopupMenu"); - layerPopup.style.visibility = "hidden"; - - if (gbBsNS6) - { - var e = fn_arguments[0]; - nEventX = e.pageX; - nEventY = e.pageY; - } - else - { - nEventX = window.event.clientX; - nEventY = window.event.clientY; - } - _BSPSGetClientSize(); - layerPopup.innerHTML = strMenu; - - if (nEventY + layerPopup.offsetHeight + 20 < window.pageYOffset + gBsClientHeight) { - nEventY += 20; - } else { - nEventY = gBsClientHeight + window.pageYOffset - layerPopup.offsetHeight - 20; - } - - if (nEventX + layerPopup.offsetWidth + 20 > gBsClientWidth + window.pageXOffset) { - if (gBsClientWidth + window.pageXOffset - layerPopup.offsetWidth < 20) { - nEventX = 5; - } else { - nEventX = gBsClientWidth + window.pageXOffset - layerPopup.offsetWidth - 20; - } - } else { - nEventX += 20; - } - layerPopup.style.top = nEventY; - layerPopup.style.left = nEventX; - // set again to avoid the stupid frash in netscape 6. - layerPopup.innerHTML = strMenu; - layerPopup.style.visibility = "visible"; - //window.captureEvents(Event.MOUSEDOWN); - if (!gOlddocumentClick && document.onclick) - gOlddocumentClick = document.onclick; - window.onclick = PopupMenu_HandleClick; - } - else if (gbBsNS4) { - layerPopup = document.layers.PopupMenu; - layerPopup.visibility = "hide"; - stylePopup = layerPopup.document; - stylePopup.write(strMenu); - stylePopup.close(); - var e = fn_arguments[0]; - nEventX = e.pageX; - nEventY = e.pageY; - _BSPSGetClientSize(); - if (nEventY + layerPopup.clip.height + 20 < window.pageYOffset + gBsClientHeight) { - nEventY += 20; - } else { - nEventY = gBsClientHeight + window.pageYOffset- layerPopup.clip.height - 20; - } - layerPopup.top = nEventY; - - if (nEventX + layerPopup.clip.width + 20 > gBsClientWidth + window.pageXOffset) { - if (gBsClientWidth + window.pageXOffset - layerPopup.clip.width < 20) { - nEventX = 5; - } else { - nEventX = gBsClientWidth + window.pageXOffset - layerPopup.clip.width - 20; - } - } else { - nEventX += 20; - } - - layerPopup.left = nEventX; - - layerPopup.visibility = "show"; - - window.captureEvents(Event.MOUSEDOWN); - if (!gOlddocumentClick && document.onmousedown) - gOlddocumentClick = document.onmousedown; - window.onmousedown = PopupMenu_HandleClick; - } - - window.gbInPopupMenu = true; - window.gbPopupMenuTimeoutExpired = false; - setTimeout("PopupMenu_Timeout();", 100); - return false; -} - -function PopupMenu_Timeout() -{ - window.gbPopupMenuTimeoutExpired = true; -} - -function PopupMenu_Over(e) -{ - if (gbBsIE4||gbBsOpera7) - e.srcElement.className = "PopupOver"; - else if (gbBsNS6) - e.target.parentNode.className = "PopupOver"; - return; -} - -function PopupMenu_Out(e) -{ - if (gbBsIE4||gbBsOpera7) - e.srcElement.className = "PopupNotOver"; - else if (gbBsNS6) - e.target.parentNode.className = "PopupNotOver"; - return; -} - -function PopupMenu_HandleClick(e) -{ - if (window.gbPopupMenuTimeoutExpired) { - window.gbInPopupMenu = false; - if (gbBsNS4 && !gbBsNS6) { - window.releaseEvents(Event.MOUSEDOWN); - } - - var layerPopup = null; - if (gbBsNS4&&!gbBsNS6) { - layerPopup = document.layers.PopupMenu; - layerPopup.visibility = "hide"; - } else { - layerPopup = getElement("PopupMenu"); - layerPopup.style.visibility = "hidden"; - } - - if (gOlddocumentClick) - { - if (gbBsNS4 && !gbBsNS6) - document.onmousedown = gOlddocumentClick; - else - document.onclick = gOlddocumentClick; - } - } - return; -} - -function BSSCPopup_ClickMac() -{ - if ((!DHTMLPopupSupport()) && (gbBsIE4 || gbBsOpera7)) - { - var bClickOnAnchor = false; - var el; - if ((window.event != null) && - (window.event.srcElement != null)) - { - el = window.event.srcElement; - while (el != null) - { - if ((el.tagName == "A") || (el.tagName == "AREA")) { - bClickOnAnchor = true; - break; - } - if (el.tagName == "BODY") { - break; - } - el = getParentNode(el); - } - } - if (BSSCPopup_IsPopup()) - { - if (!bClickOnAnchor) { - parent.window.gPopupWindow = null; - self.close(); - } - } - else - { - bClosePopupWindow = true; - if ((bClickOnAnchor) && - (el.href) && - ((el.href.indexOf("javascript:BSSCPopup") != -1) || (el.href.indexOf("javascript:null") != -1) || (el.href.indexOf("javascript:void(0)") != -1))) - { - bClosePopupWindow = false; - } - if (bClosePopupWindow) - { - if (window.gPopupWindow != null && !window.gPopupWindow.closed ) - { - window.gPopupWindow.close(); - } - } - } - } -} - -function BsPopupOnClick() -{ - if (!gbBsIE4 && !gbBsOpera7) - return; - - BSSCPopup_ClickMac(); -} - -function _BSSCOnError(message) -{ - if(-1 != message.indexOf("denied") - || -1 != message.indexOf("Object required")) - return true; -} - -//End to support previous relative topics - -/// Section End - General and relative topics (JavaScript 1.0) - -/// Section Begin - Popup (JavaScript 1.0) -//Begin to support previous popup functions - -//variables used to isolate the browser type -var gBsStyVisShow = null; -var gBsStyVisHide = null; -var gBsClientWidth = 640; -var gBsClientHeight = 480; - -// here is the varible for judge popup windows size. these parameter is for IE5.0, it may need adjust for others. -var gBRateH_W = 0.618; // 1.618 Golden cut. -var gBMaxXOfParent = 0.8; -var gBMaxYOfParent = 0.8; -var gBscrollHeight = 16; -var gBscrollWidth = 16; -var gBpermitXDelta = 3; -var gBpermitYDelta = 3; - - -var arrayPopupURL = new Array(); -var arrayAbsPopupURL = new Array(); - -var arrayDirty = new Array(); - -function setAbsPopupURL(nIndex, strURL) -{ - arrayAbsPopupURL[nIndex] = strURL; -} - -function getAbsPopupURL(nIndex) -{ - if (nIndex == -1 || arrayAbsPopupURL.length <= nIndex) return null; - else - return arrayAbsPopupURL[nIndex]; -} - -function getPopupURL(nIndex) -{ - if (nIndex == -1 || arrayPopupURL.length <= nIndex) return null; - else - return arrayPopupURL[nIndex]; -} - -function getPopupID(nIndex) -{ - return gstrPopupID + nIndex; -} - -function getPopupShadowID(nIndex) -{ - return gstrPopupShadowID + nIndex; -} - -function getPopupTopicID(nIndex) -{ - return gstrPopupTopicID + nIndex; -} - -function getPopupIFrameID(nIndex) -{ - return gstrPopupIFrameID + nIndex; -} - -function getPopupIFrameName(nIndex) -{ - return gstrPopupIFrameName + nIndex; -} - - -function getPopupTopicStyle(nIndex) -{ - return getElement(getPopupTopicID(nIndex)).style; -} - -function getPopupShadowStyle(nIndex) -{ - return getElement(getPopupShadowID(nIndex)).style; -} - -function getPopupIFrame(nIndex) -{ - if (gbBsNS6) - return eval("window.frames['" + getPopupIFrameName(nIndex) + "']"); - else - return eval("document.frames['" + getPopupIFrameName(nIndex) + "']"); -} - -function getPopupDivStyle(nIndex) -{ - return getElement(getPopupID(nIndex)).style; -} - -function getPopupIFrameStyle(nIndex) -{ - return getElement(getPopupIFrameID(nIndex)).style; -} - - -function findDiv(strURL) -{ - for (var i = 0; i < arrayPopupURL.length; i ++ ) { - if (arrayPopupURL[i] == strURL) { - return i; - } - } - return -1; -} - -var gnToken = -1; -function takeToken() -{ - gnToken ++; - if (gnToken > 10000) gnToken = 0; - return gnToken; -} - -function IsValidToken(nToken) -{ - return (gnToken == nToken); -} - -function addDiv(strURL) -{ - for (var i = 0; i < arrayPopupURL.length; i ++) { - if (arrayPopupURL[i] == null) { - arrayPopupURL[i] = strURL; - return i; - } - } - arrayPopupURL[i] = strURL; - arrayDirty[i] = true; - return i; -} - -function setDirty() -{ - for (var i = 0; i < arrayPopupURL.length; i ++ ) - arrayDirty[i] = true; -} - -function IsDirty(nIndex) -{ - if (nIndex == -1) - return true; - else - if (arrayDirty.length > nIndex) - return arrayDirty[nIndex]; - else - return true; -} - -function hideAll() -{ - for (var i = 0; i < arrayPopupURL.length; i ++ ) - { - getPopupDivStyle(i).visibility = gBsStyVisHide; - getPopupIFrameStyle(i).visibility = gBsStyVisHide; - } -} - -function getCurrentPopupIFrame() -{ - for (var i = 0; i < arrayPopupURL.length; i ++) - if (getPopupDivStyle(i).visibility == gBsStyVisShow) - return getPopupIFrame(i); - return null; -} - -function setClear(nIndex) -{ - if (nIndex != -1) - arrayDirty[nIndex] = false; -} - -function _BSSCCreatePopupDiv(strURL) -{ - var nIndex = findDiv(strURL); - if (nIndex == -1 ) { - nIndex = addDiv(strURL); - BsPopup_CreateDiv(nIndex); - } - else { - if (IsDirty(nIndex)) { - if("object" == typeof(getPopupIFrame(nIndex).document)) - getPopupIFrame(nIndex).document.location.href = strURL; - } - } - return nIndex; -} - -//Here is the browser type -function _BSPSGetBrowserInfo() -{ - if (gbBsNS4&&!gbBsNS6) - { - gBsStyVisShow = "show"; - gBsStyVisHide = "hide"; - } - else - { - gBsStyVisShow = "visible"; - gBsStyVisHide = "hidden"; - } -} - -_BSPSGetBrowserInfo(); - -//Get client size info -function _BSPSGetClientSize() -{ - if (gbBsNS4||gbBsKonqueror3||gbBsSafari) - { - gBsClientWidth = innerWidth; - gBsClientHeight = innerHeight; - } - else if (gbBsIE4 || gbBsOpera7) - { - gBsClientWidth = document.body.clientWidth; - gBsClientHeight = document.body.clientHeight; - } -} - -var gstrPopupID = 'BSSCPopup'; -var gstrPopupShadowID = 'BSSCPopupShadow'; -var gstrPopupTopicID = 'BSSCPopupTopic'; -var gstrPopupIFrameID = 'BSSCPopupIFrame'; -var gstrPopupIFrameName = 'BSSCPopupIFrameName'; - -var gstrPopupSecondWindowName = 'BSSCPopup'; - -var gPopupWindow = null; -var gnPopupClickX = 0; -var gnPopupClickY = 0; - -var gnPopupScreenClickX = 0; -var gnPopupScreenClickY = 0; - -var gbPopupTimeoutExpired = false; - -function DHTMLPopupSupport() -{ - if (((gbBsIE4) && (!gbBsMac))||gbBsOpera7|| gbBsNS7) { - return true; - } - return false; -} - -function BSSCPopup_IsPopup() -{ - if (DHTMLPopupSupport() && (this.name.indexOf(gstrPopupIFrameName) != -1)) { - return true; - } else if ((gbBsNS4 || gbBsIE4 || gbBsOpera7) && (this.name.indexOf(gstrPopupID) != -1)) { - return true; - } else { - return false; - } -} - -// If there is a hyperlink in a popup window, display the hyperlink in -// the original window. (bsscright) -if (BSSCPopup_IsPopup() && !gbBsIE4 && !gbBsOpera7) { - document.write(""); -} - -// Local functions. -function BsPopup_CreateDiv(nIndex) -{ - if(!DHTMLPopupSupport()) - return; - // DO NOT SET Width and height for the div, otherwize it will make IE4 popup do not work when view the topic alone. - var strPopupDiv = ""; - - var objBody = getElementsByTag(document, "BODY")[0]; - if( typeof(objBody) != "object" ) - return; - - insertAdjacentHTML(objBody, "beforeEnd", strPopupDiv); -} - -function handleLoadNS() -{ - if (this.id) - { - var nIndex = parseInt(this.id.substring(gstrPopupIFrameID.length)); - BSSCPopup_PostWork(nIndex); - } -} - -function BSSCPopup_PostWork(nIndex) -{ - getPopupDivStyle(nIndex).visibility = gBsStyVisShow; - getPopupIFrameStyle(nIndex).visibility =gBsStyVisShow; - - setClear(nIndex); - window.gbPopupTimeoutExpired = true; - - BSSCPopup_ChangeTargettoParent(getPopupIFrame(nIndex).document); - if (gbBsNS6) - getPopupIFrame(nIndex).document.body.addEventListener("click",BSSCPopupClicked,false); - else - getPopupIFrame(nIndex).document.body.onclick = BSSCPopupClicked; - - if (!gbOrignalOnMouseDown && document.onmousedown) - gbOrignalOnMouseDown = document.onmousedown; - - if (gbBsNS6) - document.addEventListener("mousedown", BSSCPopupParentClicked,false); - else - document.onmousedown = BSSCPopupParentClicked; -} - -function BSSCPopup_Timeout(nIndex, nToken) -{ - if (!IsValidToken(nToken)) return; - - if (gbBsNS6||((getPopupIFrame(nIndex).document.readyState == "complete") && - (getPopupIFrame(nIndex).document.body != null))) { - BSSCPopup_PostWork(nIndex); - } else { - setTimeout("BSSCPopup_Timeout(" + nIndex + "," + nToken + ")", 100); - } -} - -// VH 08/10/00 -// do not change target to parent if the href is using javascript -function BSSCPopup_ChangeTargettoParent(tagsObject) -{ - var collA = getElementsByTag(tagsObject, "A"); - BSSCPopup_ChangeTargettoParent2(collA); - - var collIMG = getElementsByTag(tagsObject,"IMG"); - BSSCPopup_ChangeTargettoParent2(collIMG); -} - -function BSSCPopup_ChangeTargettoParent2(colls) -{ - if (colls != null) { - for (var j = 0; j < colls.length; j ++ ) - { - var strtemp = colls[j].href; - if (strtemp) - { - strtemp = strtemp.toLowerCase(); - if (strtemp.indexOf("javascript:") == -1) - if (colls[j].target == "") - colls[j].target = "_parent"; - } - } - } -} - -function BSPSPopupTopicWinHelp(strURL) -{ - _BSSCPopup(strURL); - return; -} - -function _BSSCPopup(strURL, width, height) -{ - var cuswidth = 0; - var cusheight = 0; - if ("undefined" != typeof(width) && "undefined" != typeof(height)) { - cuswidth = width; - cusheight= height; - } - - if (DHTMLPopupSupport()) { - var nToken = takeToken(); // take token first. - var nIndex = _BSSCCreatePopupDiv(strURL); - window.gbPopupTimeoutExpired = false; - var ntWidth = gBsClientWidth; - var ntHeight = gBsClientHeight; - _BSPSGetClientSize(); - if (ntWidth != gBsClientWidth || ntHeight != gBsClientHeight) { - setDirty(); - } - - if (IsDirty(nIndex)) { - if (gbBsMac) { - setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight +")", 400); - } else { - setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 100); - } - } - else { - MoveDivAndShow(nIndex ,nToken, cuswidth, cusheight); - } - } else { - _BSSCPopup2(strURL, cuswidth, cusheight); - } - return; -} - -if (gbBsIE55) -{ - var ehlpdhtm_fOldBefureUnload = window.onbeforeunload; - var gnBsUnload=0; - window.onbeforeunload = window_BUnload; -} - -function window_BUnload() -{ - gnBsUnload++; - if (gnBsUnload>1) - return; - for (var i = 0; i < arrayPopupURL.length; i ++) - removeThis(document.all(getPopupID(i))); - arrayPopupURL.length = 0; - if (ehlpdhtm_fOldBefureUnload) - ehlpdhtm_fOldBefureUnload(); -} - -function _BSSCPopup2(strURL, width, height) -{ - if (gbBsOpera6&&gbBsMac) - { - var wmTemp = window.open(document.location.href, gstrPopupSecondWindowName); - wmTemp.close(); - setTimeout("_BSSCPopup3(\""+strURL+"\","+width+","+height+");",100); - } - else - _BSSCPopup3(strURL, width, height); -} - -function _BSSCPopup3(strURL, width, height) -{ - if (window.name == gstrPopupSecondWindowName) { - window.location = strURL; - } else { - if (!gbBsMac || !gbBsNS4) { - BSSCHidePopupWindow(); - } - var nX = 0; - var nY = 0; - var nHeight = 300; - var nWidth = 400; - if (width > 0 && height > 0) { - nHeight = height; - nWidth = width; - } - _BSPSGetClientSize(); - - nX = window.gnPopupScreenClickX; - nY = window.gnPopupScreenClickY; - - if (nY + nHeight + 40 > screen.availHeight) { - nY = screen.availHeight - nHeight - 40; - } - if (nX + nWidth + 40 > screen.availWidth) { - nX = screen.availWidth - nWidth - 40; - } - - // Launch a separate window - var strParam="titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes"; - if (gbBsNS) { - if (gbBsNS6) { - strParam += ",Height=" + nHeight + ",Width=" + nWidth; - strParam += ",screenX=" + nX + ",screenY=" + nY; - strParam += ",dependent=yes"; - } - else { - strParam += ",OuterHeight=" + nHeight + ",OuterWidth=" + nWidth; - strParam += ",screenX=" + nX + ",screenY=" + nY; - strParam += ",dependent=yes"; - } - } - else { - strParam += ",height=" + nHeight + ",width=" + nWidth; - strParam += ",left=" + nX + ",top=" + nY; - } - if (gbBsSafari) - { - if (window.gPopupWindow) - window.gPopupWindow.close(); - window.gPopupWindow = window.open(strURL, "", strParam); - window.gPopupWindow.name = gstrPopupSecondWindowName; - window.gPopupWindow.moveTo(nX, nY); - widnow.gPopupWindow.document.location.reload(); - } - else - { - var wmTemp=null; - if (gbBsKonqueror3) - { - if (window.gPopupWindow) - window.gPopupWindow.close(); - } - if (gbBsOpera&&gbBsMac) - { - wmTemp= window.open(document.location.href, "Temp", strParam); - } - window.gPopupWindow = window.open(strURL, gstrPopupSecondWindowName, strParam); - if (!gbBsIE) - window.gPopupWindow.focus(); - - if (wmTemp) - wmTemp.close(); - } - - if (gbBsNS4) - setEventHandle(); - else if (gbBsIE4 || gbBsOpera7||gbBsKonqueror3) - setTimeout("setPopupFocus();", 100); - } - return; -} - -function setEventHandle() -{ - window.gPopupWindow.captureEvents(Event.CLICK | Event.BLUR); - window.gPopupWindow.onclick = NonIEPopup_HandleClick; - window.gPopupWindow.onblur = NonIEPopup_HandleBlur; -} - -function setPopupFocus() -{ - window.gPopupWindow.focus(); -} - -function NonIEPopup_HandleBlur(e) -{ - window.gPopupWindow.focus(); -} - -function NonIEPopup_HandleClick(e) -{ - // Because navigator will give the event to the handler before the hyperlink, let's - // first route the event to see if we are clicking on a Popup menu in a popup. - document.routeEvent(e); - - // If a popup menu is active then don't do anything with the click - if (window.gPopupWindow.gbInPopupMenu) { - window.gPopupWindow.captureEvents(Event.CLICK); - window.gPopupWindow.onclick = NonIEPopup_HandleClick; - return false; - } - - // Close the popup window - if(e.target.href) - { - if(e.target.href.indexOf("javascript:")==-1) - { - if (e.target.target=="") - window.location.href = e.target.href; - else - window.open(e.target.href, e.target.target); - this.close(); - } - } - else - this.close(); - return false; -} - -function BSSCPopup_AfterLoad(nIndex, nToken, cuswidth, cusheight) -{ - if (!window.getPopupIFrame(nIndex).document) { - _BSSCPopup2(getPopupURL(nIndex), cuswidth, cusheight); - return; - } - - if (!IsValidToken(nToken)) return; - - if (gbBsNS6) - { - setAbsPopupURL(nIndex, window.getPopupIFrame(nIndex).document.location.href); // change URL to abs url. - BSSCPopup_ResizeAfterLoad(nIndex, nToken, cuswidth, cusheight); - return; - } - - if ((window.getPopupIFrame(nIndex).document.readyState == "complete") && - (window.getPopupIFrame(nIndex).document.body != null)) { - 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. - window.getPopupIFrame(nIndex).document.location = getPopupURL(nIndex); - setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 200); - } - else - { - setAbsPopupURL(nIndex, window.getPopupIFrame(nIndex).document.location.href); // change URL to abs url. - BSSCPopup_ResizeAfterLoad(nIndex, nToken, cuswidth, cusheight); - } - } else { - setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 200); - } -} - -function BSSCPopup_ResizeAfterLoad(nIndex, nToken, cuswidth, cusheight) -{ - if (window.gbPopupTimeoutExpired) return; - - if (!IsValidToken(nToken)) return; - - getPopupDivStyle(nIndex).visibility = gBsStyVisHide; - getPopupIFrameStyle(nIndex).visibility = gBsStyVisHide; - - // Determine the width and height for the window - _BSPSGetClientSize(); - - var size = new BSSCSize(0, 0); - - if (cuswidth <= 0 || cusheight <= 0) - BSSCGetContentSize(window.getPopupIFrame(nIndex), size); - else { - size.x = cuswidth; - size.y = cusheight; - } - - // Determine the width and height for the window - var nWidth = size.x; - var nHeight = size.y; - - // for small popup size, we should allow any size. - // The popup size should be ok if bigger than 0 - if (nWidth < 0 || nHeight < 0) return; // there must be something terribly wrong. - - getPopupDivStyle(nIndex).width = nWidth; - getPopupDivStyle(nIndex).height = nHeight; - - getPopupShadowStyle(nIndex).width = nWidth; - getPopupShadowStyle(nIndex).height = nHeight; - getPopupTopicStyle(nIndex).width = nWidth; - getPopupTopicStyle(nIndex).height = nHeight; - if (gbBsIE55) - { - getPopupShadowStyle(nIndex).width = nWidth + 2; - getPopupShadowStyle(nIndex).height = nHeight + 2; - getPopupTopicStyle(nIndex).width = nWidth + 2; - getPopupTopicStyle(nIndex).height = nHeight + 2; - } - - getPopupIFrameStyle(nIndex).width = nWidth; - getPopupIFrameStyle(nIndex).height = nHeight; - if (gbBsIE55 || gbBsNS6) - { - getPopupIFrameStyle(nIndex).top = 0; - getPopupIFrameStyle(nIndex).left = 0; - } - - var strURL = getPopupURL(nIndex); - if (strURL.indexOf("#") != -1&&gbBsNS6) - getPopupIFrame(nIndex).location.reload(); - else if (strURL.indexOf("#") != -1||gbBsNS6) - getPopupIFrame(nIndex).location.href = strURL; // reload again, this will fix the bookmark misunderstand in IE5. - - MoveDivAndShow(nIndex, nToken, cuswidth, cusheight); -} - -function getScrollLeft() -{ - if (document.body.scrollLeft) - return document.body.scrollLeft; - else if (window.pageXOffset) - return window.pageXOffset; - else - return 0; -} - -function getScrollTop() -{ - if (document.body.scrollTop) - return document.body.scrollTop; - else if (window.pageYOffset) - return window.pageYOffset; - else - return 0; -} - - -function MoveDivAndShow(nIndex, nToken, cuswidth, cusheight) -{ - if (window.getPopupIFrame(nIndex).document.location.href != getAbsPopupURL(nIndex)) { // if redirect, reload again. - window.getPopupIFrame(nIndex).document.location = getPopupURL(nIndex); - setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 200); - return; - } - - // Determine the position of the window - var nClickX = window.gnPopupClickX; - var nClickY = window.gnPopupClickY; - var nTop = 0; - var nLeft = 0; - - var nWidth = parseInt(getPopupDivStyle(nIndex).width); - var nHeight = parseInt(getPopupDivStyle(nIndex).height); - - if (nClickY + nHeight + 20 < gBsClientHeight + getScrollTop()) { - nTop = nClickY + 10; - } else { - nTop = (getScrollTop() + gBsClientHeight) - nHeight - 20; - } - if (nClickX + nWidth < gBsClientWidth + getScrollLeft()) { - nLeft = nClickX; - } else { - nLeft = (getScrollLeft() + gBsClientWidth) - nWidth - 8; - } - - if (nTop < getScrollTop()) nTop = getScrollTop() + 1; - if (nLeft< getScrollLeft()) nLeft = getScrollLeft() + 1; - - getPopupDivStyle(nIndex).left = nLeft; - getPopupDivStyle(nIndex).top = nTop; - - // Set the location of the background blocks - getPopupShadowStyle(nIndex).left = 6; - getPopupShadowStyle(nIndex).top = 6; - if (gbBsIE55) - { - getPopupShadowStyle(nIndex).left = 4; - getPopupShadowStyle(nIndex).top = 4; - } - - if (gbBsMac&&gbBsIE4) { - // Total hack on the iMac to get the IFrame to position properly - getPopupIFrameStyle(nIndex).pixelLeft = 100; - getPopupIFrameStyle(nIndex).pixelLeft = 0; - // Explicitly call BSSCOnLoad because the Mac doesn't seem to do it - getPopupIFrame(nIndex).window.BSSCOnLoad(); - } - - if (gbBsNS6&&IsDirty(nIndex)) - getElement(getPopupIFrameID(nIndex)).addEventListener("load", handleLoadNS, false); - else - BSSCPopup_Timeout(nIndex , nToken ); - return; -} - -function BSSCSize(x, y) -{ - this.x = x; - this.y = y; -} - -function BSSCGetContentSize(thisWindow, size) -{ - if (!gbBsIE4 && !gbBsOpera7 && !gbBsNS4) - return; - - if ((gbBsMac&&gbBsIE4)||gbBsNS4||gbBsOpera7) { - size.x = 320; - size.y = 180; - return; - } - - // Resize the width until it is wide enough to handle the content - // The trick is to start wide and determine when the scrollHeight changes - // because then we know a scrollbar is necessary. We can then go back - // to the next widest size (for no scrollbar) - - var ClientRate = gBsClientHeight / gBsClientWidth; - - - var GoldenSize = new BSSCSize(0,0); - GoldenSize.x = gBsClientWidth * gBMaxXOfParent; - GoldenSize.y = gBsClientHeight *gBMaxYOfParent ; - - if (ClientRate > gBRateH_W) { - GoldenSize.y = GoldenSize.x * gBRateH_W; - } - else { - GoldenSize.x = GoldenSize.y / gBRateH_W; - } - - // Try to using parent specified max x. - var x = 0; - var maxgoldx = GoldenSize.x; - var maxx = gBsClientWidth * gBMaxXOfParent; - - // This double resize causes the document to re-render (and we need it to) - if (!gbBsIE5) - thisWindow.moveTo(10000,10000); // this is used to fix the flash on IE4. - - thisWindow.resizeTo(1, 1); - thisWindow.resizeTo(1, 1); - thisWindow.resizeTo(maxgoldx, thisWindow.document.body.scrollHeight + gBscrollHeight); - thisWindow.resizeTo(maxgoldx, thisWindow.document.body.scrollHeight + gBscrollHeight); - - var miny = thisWindow.document.body.scrollHeight + gBscrollHeight; - - 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 - { - thisWindow.resizeTo(maxx , thisWindow.document.body.scrollHeight + gBscrollHeight); - thisWindow.resizeTo(maxx , thisWindow.document.body.scrollHeight + gBscrollHeight); - - miny = thisWindow.document.body.scrollHeight + gBscrollHeight; - maxy = gBsClientHeight * gBMaxYOfParent; - - if (miny > maxy) { // the popup must have a scroll, OK let it be. - miny = maxy; - size.x = maxx; - size.y = maxy; - thisWindow.document.body.scroll = 'yes'; // At this time we do want to show scroll any more. so it will looks better a little. - } - else { // popup still can fit in the parent area by someway. now we choose the same h/w rate as parent. - size.y = miny; - - // downsize from maxx , now I try to using binary divide. - x = maxx; - deltax = -maxx/2; - //j = 0; - while (true) { - x = x + deltax; - thisWindow.resizeTo(x, miny); - thisWindow.resizeTo(x, miny); - diffy = thisWindow.document.body.scrollHeight + gBscrollHeight - x * ClientRate; - if (diffy > gBpermitYDelta ) // it is higher than wanted, so x need to be wide a little bitter - deltax = Math.abs(deltax) /2; - else if (diffy < -gBpermitYDelta) // it is shorter than wanted, so x need to be narrow a little bitter - deltax = -Math.abs(deltax) /2; - else - // the y is close enough to wanted. - break; - if (Math.abs(deltax) < gBpermitXDelta) // the next change is too slight and it can be ignore. - break; - } - size.x = thisWindow.document.body.scrollWidth; //+ gBscrollWidth; - size.y = thisWindow.document.body.scrollHeight;// + gBscrollHeight; - thisWindow.document.body.scroll = 'no'; - } - } - else { - if (thisWindow.document.body.scrollWidth > maxgoldx) { - size.x = maxx; - size.y = miny; - thisWindow.document.body.scroll = 'yes'; - } - else { - // downsize from maxgoldx , now I try to using binary divide. - x = maxgoldx; - deltax = -maxgoldx/2; - while (true) { - x = x + deltax; - thisWindow.resizeTo(x, miny); - thisWindow.resizeTo(x, miny); - diffy = thisWindow.document.body.scrollHeight + gBscrollHeight - x * gBRateH_W; - if (diffy > gBpermitYDelta ) // it is higher than wanted, so x need to be wide a little bitter - deltax = Math.abs(deltax) /2; - else if (diffy < -gBpermitYDelta) // it is shorter than wanted, so x need to be narrow a little bitter - deltax = -Math.abs(deltax) /2; - else - // the y is close enough to wanted. - break; - if (Math.abs(deltax) < gBpermitXDelta) // the next change is too slight and it can be ignore. - break; - } - size.x = thisWindow.document.body.scrollWidth; //+ gBscrollWidth; - size.y = thisWindow.document.body.scrollHeight ; - thisWindow.document.body.scroll = 'no'; // At this time we do not want to show scroll any more. so it will looks better a little. - thisWindow.resizeTo(size.x, size.y); - if (thisWindow.document.body.scrollWidth > size.x) - { - size.x = thisWindow.document.body.scrollWidth; - } - if (thisWindow.document.body.scrollHeight > size.y) - { - size.y = thisWindow.document.body.scrollHeight; - } - } - } - thisWindow.resizeTo(size.x, size.y); - thisWindow.resizeTo(size.x, size.y); - return; -} - -function BSSCPopupParentClicked() -{ - if (!window.gbPopupTimeoutExpired) { - return false; - } - - document.onmousedown = gbOrignalOnMouseDown; - - // Simply hide the popup - hideAll(); - - window.gbPopupTimeoutExpired = false; - - return true; -} - -function isInsideHyperLink(obj) -{ - if (obj&&obj!=getParentNode(obj)) - { - if (obj.tagName=="A"||obj.tagName=="IMG") - return true; - else - return isInsideHyperLink(getParentNode(obj)); - } - else - return false; -} - -function BSSCPopupClicked(e) -{ - if (!window.gbPopupTimeoutExpired) { - return false; - } - - var popupIFrame = getCurrentPopupIFrame(); - if (popupIFrame == null) { - return true; - } - - if (gbBsIE4 && (!((popupIFrame.window.event != null) && - (popupIFrame.window.event.srcElement != null) && - isInsideHyperLink(popupIFrame.window.event.srcElement)))) { - document.onmousedown = gbOrignalOnMouseDown; - - // Simply hide the popup - hideAll(); - window.gbPopupTimeoutExpired = false; - return true; - } - else if (gbBsNS6 && (!((e != null) && - (e.target!= null) && isInsideHyperLink(e.target)))) - { - document.addEventListener("mousedown", gbOrignalOnMouseDown,false); - // Simply hide the popup - hideAll(); - window.gbPopupTimeoutExpired = false; - return true; - } -} - -//trace the mouse over's position for hotspot -function BSPSPopupOnMouseOver(event) -{ - if (gbBsIE4 || gbBsOpera7||gbBsKonqueror3) { - window.gnPopupClickX = event.clientX + getScrollLeft(); - window.gnPopupClickY = event.clientY + getScrollTop(); - window.gnPopupScreenClickX = event.screenX; - window.gnPopupScreenClickY = event.screenY; - } else if (gbBsSafari) { - window.gnPopupClickX = event.clientX + getScrollLeft(); - window.gnPopupClickY = event.clientY + getScrollTop(); - window.gnPopupScreenClickX = event.screenX + window.screenX; - window.gnPopupScreenClickY = event.screenY + window.screenY; - } else if (gbBsNS4) { - window.gnPopupClickX = event.pageX - window.pageXOffset; - window.gnPopupClickY = event.pageY - window.pageYOffset; - window.gnPopupScreenClickX = event.screenX - window.pageXOffset; - window.gnPopupScreenClickY = event.screenY - window.pageYOffset; - } -} - -function BSSCHidePopupWindow() -{ - if (window.gPopupWindow != null) { - if (gbBsNS4) { - if ((typeof window.gPopupWindow != "undefined") && (!window.gPopupWindow.closed)) { - window.gPopupWindow.close(); - window.gPopupWindow = null; - } - } - } - return; -} - -// Add the PopupOnClick to the onclick array. -if (typeof(BsscRegisterOnClick) != "undefined") -{ - BsscRegisterOnClick(BsPopupOnClick); -} -//End to support previous popup functions - -/// Section End - Popup (JavaScript 1.0) - -/// Section Begin - Embedded Stub (JavaScript 1.0) - -function BSSCCreatePopupDiv() -{ - return; -} - -function WritePopupMenuLayer() -{ - if (BsscHasExtJs()) {_WritePopupMenuLayer();} -} - -function BSSCPopup(strURL, width, height) -{ - var re = new RegExp("'", 'g'); - strURL = strURL.replace(re, "%27"); - - if (BsscHasExtJs()) { - _BSSCPopup(strURL, width, height); - }else{ - //Create a temporary window first to ensure the real popup comes up on top - var wndTemp = null; - if (!gbBsNS3) { - wndTemp = window.open("", "temp", "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes,height=3,width=4"); - } - // Create the real popup window - var wndPopup = window.open(strURL, "BSSCPopup", "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes,height=300,width=400"); - // Close the temporary - if (!gbBsNS3) { - wndTemp.close(); - } else { - wndPopup.focus(); - } - } -} - -var gbWndTemp = null, gbWndPopupLinks = null; -var gbstrParaTotal = ""; - -function PopupMenu_Invoke() -{ - if (typeof(wfRelatedTopic) == 'function' && typeof(IsFlashSupported) == 'function') - { - if (Number(gsSkinVersion) > 2 && IsFlashSupported()) - { - return wfRelatedTopic(PopupMenu_Invoke.arguments); - } - } - if (BsscHasExtJs()) { - return _PopupMenu_Invoke(PopupMenu_Invoke.arguments); - } - if (gbBsNS3Before || gbBsIE3Before ) { - var argLen = PopupMenu_Invoke.arguments.length; - if (argLen < 5) { - window.document.location.href = PopupMenu_Invoke.arguments[3]; - return false; - } - gbWndTemp = null; - gbWndPopupLinks = null; - gbstrParaTotal = ""; - for (var i = 0; i < (argLen - 2) / 2; i++) { - var strParaLine = ""; - if (gbBsNS2){ - strParaLine += "" - strParaLine += PopupMenu_Invoke.arguments[2 * i + 2]; - strParaLine += ""; - } else { - strParaLine += ""); - if (gbBsNS2) { - gbWndPopupLinks.document.write(""); - } else { - //YJ: IE301,302 and NS3.x works fine - gbWndPopupLinks.document.write("<"); - gbWndPopupLinks.document.write("script>"); - gbWndPopupLinks.document.write("function gotoUrl(aUrl) {opener.window.location=aUrl; close();}"); - gbWndPopupLinks.document.write("<"); - gbWndPopupLinks.document.write("/script>"); - } - gbWndPopupLinks.document.write(""); - gbWndPopupLinks.document.write(gbstrParaTotal); - gbWndPopupLinks.document.write(""); - gbWndPopupLinks.document.close(); - - // Close the temporary - if (!gbBsNS3 && gbWndTemp != null) { - gbWndTemp.close(); - }else { - gbWndPopupLinks.focus(); - } - - return true; - } - return false; -} - -/// Section End - Embedded Stub (JavaScript 1.0) - -//// Segment End -- (JavaScript 1.0) - -//// Segment Begin -- (JavaScript 1.2) -/// Section Begin - kadov DHTM (JavaScript 1.2) - -//Begin to support extended and dropdown text effects. -function kadovIsParagraph(el) -{ - return( el.tagName == "P" || el.tagName.indexOf("H") == 0 ) ? true : false; -} - -function kadovInitEachChild(el) -{ - for(var i=0; i "") ) - child.style.setAttribute( "x-on-pageload", "" ); - } - - var href = child.getAttribute("href") - if( href != null && href > "" && href.indexOf( "BSSCPopup" ) >= 0 ) - kadovFilePopupInit(child.id); // Init for Popup - else if( child.className == "dropspot" || child.className == "expandspot" || - child.className == "glossterm" ) - kadovTextPopupInit(child.id);// Init for Expanding/Glossary or DropDown text - else if( child.className == "trigger") - kadovInitTrigger(child.id);// Init for Trigger - else - { - kadovInitEffects(child.id);// Init for DHTML effects - CEngine.SetOneTargetInitialState( child.id ); - } - } - - if( (child.tagName == "IMG") && (child.getAttribute("dynsrc") > "") ) - child.start = "mouseover";// to start a AVI file. fileopen doesn't work - - kadovInitEachChild(child); - } -} - -function kadovRetrieveTextInner(el) -{ - var x = ""; - if( (!el) || (el.tagName == "!") || (el.tagName == "SCRIPT" )) - return x; - - if( kadovIsParagraph(el) ) - { - var strNewID = " "; - if( el.id != "" ) - strNewID += "id=" + el.id + "_NewSpan "; - x = "" + el.innerHTML + ""; - } - else - { - for(var i=0; i 0 ) - if( (nTagClose - nTagOpen) != nDistance ) - return strRawHTML; - - var strCleanOnce = strRawHTML.substring(0, nTagOpen) + strRawHTML.substr(nTagClose + strTagClose.length) ; - return kadovRetrieveCleanHTML( strCleanOnce, strTagOpen, strTagClose ); -} - -function kadovAdjustObjectTag(strRawHTML, nStartPos) -{// adjust object tag for related topics HTML control, because innerHTML misses out the item settings - - //Is there any DTC? - var strDTCTagOpen = ''; - var nDTCTagOpen = strRawHTML.indexOf( strDTCTagOpen, nStartPos ); - if( nDTCTagOpen < 0 ) - return strRawHTML; - var nDTCTagClose = strRawHTML.indexOf( strDTCTagClose, nDTCTagOpen ); - if( nDTCTagClose < nDTCTagOpen) - return strRawHTML; // no Design Time Controls; - - //Is the DTC HTML Help Control? - var strRTObjTagOpen = 'classid=clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11'; - var strRTObjTagClose = ''; - var nRTObjTagOpen = strRawHTML.indexOf( strRTObjTagOpen, nDTCTagOpen ); - if( nRTObjTagOpen < nDTCTagOpen ) - return strRawHTML; - var nRTObjTagClose = strRawHTML.indexOf( strRTObjTagClose, nRTObjTagOpen ); - if( nRTObjTagClose < nRTObjTagOpen ) - return strRawHTML; // is not a HTML help control - - // Is it a related Topics html help control? - var strRTObjLabel = ''; - } - - // to insert the reconstructed item params into runtime object tag - var strAdjustedHTML = strRawHTML.substring(0,nRTObjTagClose) + strRunTimeItemParam + strRawHTML.substring(nRTObjTagClose, strRawHTML.length); - return kadovAdjustObjectTag(strAdjustedHTML, nDTCTagClose + strDTCTagClose.length); -} - -function kadovTextPopupOnLoad( el ) -{ - if( typeof(el) == "string" ) - el = getElement(el); - - var src = el.getAttribute( "x-use-popup" ); - var bNeedMove=true; - if(!src&&el.id) - { - for (var i=0;i"); - strCleanHTML = kadovRetrieveCleanHTML(strCleanHTML, ""); - - //work around the bug in HH.exe that highlight the phrases when use Search tab - //this approach is just removing the tag inserted by Microsoft in the runtime - strCleanHTML = kadovRetrieveCleanHTML(strCleanHTML, "", 52); - - var strStyle = " style='display:none; position:relative;"; - var newDiv = "
" + strCleanHTML + "
"; - - removeThis(srcDiv); // empty the original DIV tag - var elParentPra = kadovFindParentParagraph(el); - if( elParentPra ) - insertAdjacentHTML(elParentPra, "afterEnd", newDiv ); - } - else if( type == "expanding" ) - { - var inner = kadovRetrieveTextInner(srcDiv); - if( inner == "" ) - inner = srcDiv.innerHTML; - var strAdjust = kadovAdjustObjectTag(inner,0); - var strCleanHTML = kadovRetrieveCleanHTML(strAdjust, ""); - strCleanHTML = kadovRetrieveCleanHTML(strCleanHTML, ""); - var strClassName = (el.className == "glossterm") ? "glosstext" : "expandtext"; - var newSpan = ""; - removeThis(srcDiv); // empty the original DIV tag - insertAdjacentHTML(el, "afterEnd", newSpan ); - } - } - } - else - { - srcDiv.style.display = "none"; - } - return 0; -} - -function getElementsByTag(obj,sTagName) -{ - if(obj.getElementsByTagName) - return obj.getElementsByTagName(sTagName); - else if(obj.all) - return obj.all.tags(sTagName); - return null; -} - -function getElement(sID) -{ - if(document.getElementById) - return document.getElementById(sID); - else if(document.all) - return document.all(sID); - return null; -} - -function getParentNode(obj) -{ - if(obj.parentNode) - return obj.parentNode; - else if(obj.parentElement) - return obj.parentElement; - return null; -} - -function getChildNodes(obj) -{ - if(obj.childNodes) - { - var children = new Array(); - for (var i = 0; i < obj.childNodes.length; i++) - { - if (obj.childNodes[i].nodeType == 1) - children[children.length] = obj.childNodes[i]; - } - return children; - } - else if(obj.children) - return obj.children; - return null; -} - -function removeThis(obj) -{ - if(obj.parentNode) - obj.parentNode.removeChild(obj); - else - obj.outerHTML=""; -} - -function kadovTextPopup( el ) -{ - if (!gbBsIE4 && !gbBsOpera7 && !gbBsSafari && !gbBsNS6 && !gbBsKonqueror3 ) - return; - - var bNeedMove=true; - - if (window.event) - window.event.cancelBubble = true; - - if( typeof(el) == "string" ) - el = getElement(el); - - if (!el||el==window) - return; - - var src = el.getAttribute( "x-use-popup" ); - if(!src&&el.id) - { - for (var i=0;i= 0 && nNext < values.length ) - { - functions[nIdx] = values.substr( nStart, nNext-nStart+1); - nStart = nNext + 1; - nIdx++; - nNext = values.indexOf( "\)", nStart); - } - - for( var i=0; i= 0 ) - { - nPageClick = arrForClickCount[j].indexOf("="); - if( nPageClick > 0 ) - { - nClickTimes = arrForClickCount[j].substring( nPageClick + 1, arrForClickCount[j].length) * 1; - break; - } - } - } - var args = srcargs; - if( j < arrForClickCount.length ) - {// to strip out the "clicks=99" from the arguments string - args = ""; - for( var k = 0; k < arrForClickCount.length; k ++ ) - { - if( k != j ) - { - args += arrForClickCount[k]; - if( k < arrForClickCount.length - 1 ) - args += ","; - } - } - } - bsscFXInit( null, id, translatedProp, fnname, args, nClickTimes ); - } -} - -function kadovTranslateProp( prop ) -{ - switch( prop ) - { - case "x-on-hover" : return "bsschover"; - case "x-on-pageclick" : return "bsscpageclick"; - case "x-on-pageload" : return "bsscpageload"; - case "x-on-trigger-1" : return "bssctrigger1"; - case "x-on-trigger-2" : return "bssctrigger2"; - } - return null; -} -//End to convert iWrite format to RoboEditor Format for DHTML effects - -//Begin the definition of one entry to DHTML effects -function bsscFXInit( trigger_ID, target_ID, event_type, - action_type, action_setting, event_addional ) -{ - if( (!gbBsWindows && !gbBsSunOS && !(gbBsMac&&gbBsIE5)) || typeof(target_ID) != "string" )//MUST have a target_ID - return; // we don't support Navigator yet - - if( typeof(event_type) == "string" ) - event_type = event_type.toLowerCase(); - if( typeof(action_type) == "string" ) - action_type = action_type.toLowerCase(); - if( typeof(action_setting) == "string" ) - action_setting = action_setting.toLowerCase(); - - // to get the target element then add it to the target list - var eleTarget = CCSSP.GetObject( target_ID ); - if( (eleTarget != null) && (event_type != null) && (action_type != null) ) - { - CEngine.AddOneTarget( target_ID, eleTarget ); - CEngine.BuildTargetObject(target_ID, event_type, action_type, action_setting, event_addional); - } - - // to validate the trigger_ID parameter - if( typeof(trigger_ID) == "string" && trigger_ID != "" ) - CEngine.BuildTriggerObject( trigger_ID, target_ID ); -} -//End the definition of one entry to DHTML effects - -/// Section End - kadov DHTM (JavaScript 1.2) - -/// Section Begin - CCSSP DHTM (JavaScript 1.2) - -//Begin JavaScript libary for cross-platform positioning object. -function CCSSP(){} // constructor of CCSSP class - -CCSSP.GetObject = function( obj ) -{//convert object name string or reference into a valid object reference - if( typeof(obj) == "object" ) - return obj; - else if( typeof(obj) == "string" && obj != "") - { - if( gbBsNS4 ) - return eval("document." + obj); - else - return eval("document.all(\"" + obj + "\")"); - } - else - return null; -} - -CCSSP.MoveObjectTo = function(obj, x, y) -{//positioning an object at a specific pixel coordinate - if( gbBsNS4 ) - obj.moveTo(x,y); - else - { - obj.style.pixelLeft = x; - obj.style.pixelTop = y; - } -} - -CCSSP.MoveObjectBy = function(obj, dx, dy) -{//moveing a object by x and/or y pixel - if( gbBsNS4 ) - obj.moveBy(dx,dy); - else - { - obj.style.pixelLeft += dx; - obj.style.pixelTop += dy; - } -} - -CCSSP.SetObjectBGColor = function(obj, color) -{//set the background color of an object - if( gbBsNS4 ) - obj.bgColor = color; - else - obj.style.backgroundColor = color; -} - -CCSSP.ShowObject = function(obj, bShow) -{// set the object to be visible or invisible - if( gbBsNS4 ) - obj.visibility = (bShow == true) ? 'show' : 'hide'; - else - obj.style.visibility = (bShow == true) ? 'visible' : 'hidden';// when hidden, it still occupy some space. -} - -CCSSP.GetObjectLeft = function(obj) -{// retrieve the x coordinate of a posionable object - if( gbBsNS4 ) - return obj.left; - else - return obj.style.pixelLeft; -} - -CCSSP.GetObjectTop = function(obj) -{// retrieve the y coordinate of a posionable object - if( gbBsNS4 ) - return obj.top; - else - return obj.style.pixelTop; -} - -CCSSP.GetObjectContainLeft = function(obj) -{// retrieve the x coordinate of a posionable object relative to it's parent element - if( gbBsNS4 ) - return obj.pageX; - else - { - if( obj == document.body ) - return obj.clientLeft; - else - return obj.offsetLeft; - } -} - -CCSSP.GetObjectWindowLeft = function(obj) -{// retrieve the x coordinate of a posionable object relative to browser window - if( gbBsNS4 ) - return obj.pageX; - else - { - var nOffsetWindowLeft = 0; - for(var element = obj; element; element = element.offsetParent) - nOffsetWindowLeft += CCSSP.GetObjectContainLeft(element); - return nOffsetWindowLeft; - } -} - -CCSSP.GetObjectContainTop = function(obj) -{// retrieve the y coordinate of a posionable object relative to it's parent element - if( gbBsNS4 ) - return obj.pageY; - else - { - if( obj == document.body ) - return obj.clientTop; - else - return obj.offsetTop; - } -} - -CCSSP.GetObjectWindowTop = function(obj) -{// retrieve the y coordinate of a posionable object relative to browser window - if( gbBsNS4 ) - return obj.pageY; - else - { - var nOffsetWindowTop = 0; - for(var element = obj; element; element = element.offsetParent) - nOffsetWindowTop += CCSSP.GetObjectContainTop(element); - return nOffsetWindowTop; - } -} - -CCSSP.GetObjectHeight = function(obj) -{// retrieve the height of a posionable object - if( gbBsNS4 ) - return obj.clip.height; - else - return obj.offsetHeight; -} - -CCSSP.GetObjectWidth = function(obj) -{// retrieve the width of a posionable object - if( gbBsNS4 ) - return obj.clip.width; - else - return obj.offsetWidth; -} - -CCSSP.RegisterEventHandler = function( srcObj, rawEventName, funcHandler ) -{ // to add the "funcHandler" as the "rawEventName" 's handler to the "srcObj" object,the original event handler will be combined - if (gbBsNS4 && !gbBsNS6) - return ; - - var oldHandler = ""; - - if (gbBsMac &&gbBsIE4&&!gbBsIE5) - { - if (typeof(srcObj[rawEventName.toLowerCase()])=="unknown") - { //search for - - - - - - - - - -

Extrusion

- -

Extrusion 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).

- -

 

- -

To use extrusion:

- -

 

- -

1. From the Modification - menu choose the Extrusion item - or click button in the toolbar. The following dialog box - will appear:

- -

 

- -

 

- -

 

- -

2. In this dialog box you should select

- -
    - -
  • the type of elements - which will be extruded (1D or 2D),

  • - -
  • specify the IDs of - the elements which will be extruded by selecting them in the 3D viewer - or select the whole mesh or submesh,

  • - -
  • specify the vector - along which the elements will be extruded,

  • - -
  • number of steps

  • -
- -

 

- -

3. Click the Apply - or OK button.

- -

 

- -

 

- - --- - - - -
-

-

- -

 

- -
- -

 

- - - - 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 index 74b811ab6..000000000 --- a/doc/salome/gui/SMESH/extrusion_along_a_path.htm +++ /dev/null @@ -1,378 +0,0 @@ - - - - - -Extrusion along a path - - - - - - - - - - - - - -

Extrusion along a path

- -

In principle, Extrusion along a path - works in the same way as 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:

- -

.

- -

 

- -
    - -
  • Extrusion along - a straight edge (not using base point or angles)

  • -
- - --- - - - -
-

-

- -

   

- -

The left image shows a 1D path mesh, built - on a linear edge, and the initial 2D mesh. The right image shows the result - of extrusion of two edges (#1 and #2) of the initial mesh along the path. - Node #1 of path mesh has been selected as Start - node.

- -

 

- -
    - -
  • Extrusion along - a curvilinear edge (with and without angles)

  • -
- - ---- - - - - - - - - - -
-

-

-

-

The left image shows a 1D path mesh, built on curvilinear edge, and - the initial  2D - mesh.

-

The central image shows the result of extrusion of one edge (#2) of - the initial mesh along the path.  Node - #1 of path mesh has been selected as Start - node.

-

The same, but using angles {45, 45, 45, 0, -45, -45, -45}

- -

 

- -
    - -
  • Extrusion - along a sub-mesh.

  • -
- - --- - - - -
-

-

- -

 

- -

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 Shape (edge), node #1 as Start node. The angles have been defined - as {10, 10, 10}. The middle edge (#4) of the initial mesh has been extruded.

- -

 

- -
    - -
  • Extrusion - of 2d elements along a sub-mesh.

  • -
- - --- - - - -
-

-

- -

 

- -

This extrusion bases on the same path mesh - as in the previous example but the third edge of the wire was set as Shape (edge) and node #4 as Start - node. 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.

- -

 

- -
    - -
  • Extrusion of 2d elements - along a closed path.

  • -
- - ---- - - - - - - - - - -
-

-

-

-

The left image shows a path mesh built on a closed edge (circle).

-

The central image shows the result of extrusion of both faces of the - initial mesh. Note, that no sewing has been done, so, there are six coincident - nodes and two coincident faces in the resulting mesh.

-

The same, but using angles {45, -45, 45, -45, 45, -45, 45, -45}

- -

 

- -

 

- -

To use Extrusion along a path:

- -

1. From the Modification - menu choose the Extrusion along - a path item or click button in the toolbar. The - following dialog box will appear:

- -

 

- -

- -

 

- -

2. In the dialog box you should  

- -
    - -
  • select the type of - elements which will be extruded (1D or 2D),

  • - -
  • specify the IDs - of the elements which will be extruded by selecting them in the - 3D viewer or Select the whole mesh, submesh - or group,

  • - -
  • define the Path - along which the elements will be extruded,

  • -
- -

Path definition consists of several elements -

- -
    - -
  • Mesh - - containing a 1D sub-mesh on the edge, - along which proceeds the extrusion.

  • - -
  • Shape - (edge) - as the mesh can be complex, - the edge is used to define the sub-mesh for the path.

  • - -
  • Start - node -  the - first or the last node on the edge. It is used to define the direction - of extrusion.

  • -
- -

 

- -

3. There are two optional parameters, which - can be very useful.

- -
    - -
  • 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 Base - Point around which the shape is rotated is the mass center of the - shape, however, you can specify any point as the Base - Point and the shape will be rotated with respect to this point.

  • - -
  • 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 button and remove them - from the list by pressing the button.

  • -
- -

4. Click the Apply - or 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.

- -

 

- -

 See - Also a sample TUI Script of an Extrusion - along a Path operation.  

- -

 

- -

 

- - - - diff --git a/doc/salome/gui/SMESH/files/viewing_mesh_info.htm b/doc/salome/gui/SMESH/files/viewing_mesh_info.htm index e6a9ffb21..79ea7f764 100755 --- a/doc/salome/gui/SMESH/files/viewing_mesh_info.htm +++ b/doc/salome/gui/SMESH/files/viewing_mesh_info.htm @@ -23,8 +23,11 @@ img_whs6 { border:none; width:271px; height:269px; float:none; border-style:none img_whs7 { border:none; width:22px; height:27px; border-style:none; } img_whs8 { border:none; border-style:none; width:451px; height:506px; float:none; } img_whs9 { border:none; width:866px; height:287px; float:none; border-style:none; } -p.whs10 { margin-left:0px; } -p.whs11 { margin-left:80px; } +p.whs8 { margin-left:0px; } +p.whs9 { margin-left:48px; } +img_whs10 { border:none; width:310px; height:391px; float:none; border-style:none; } +img_whs11 { border:none; width:310px; float:none; height:391px; border-style:none; } +p.whs12 { margin-left:80px; } --> - - - - - - - - - - -

Free borders

- -

This mesh quality control highlights borders of faces - consisting of edges belonging to one face only.

- -

 

- -

 

- -

 

- -

In this picture the free borders are displayed in white.

- -

 

- -

See Also - a sample TUI Script of a Free - Borders quality control operation.  

- -

 

- - - - diff --git a/doc/salome/gui/SMESH/free_edges.htm b/doc/salome/gui/SMESH/free_edges.htm deleted file mode 100755 index fe7146d12..000000000 --- a/doc/salome/gui/SMESH/free_edges.htm +++ /dev/null @@ -1,122 +0,0 @@ - - - - - -Free_edges - - - - - - - - - - - - - -

Free edges

- -

  This - mesh quality control highlights borders of  elements - of mesh consisting of edges belonging to one element of mesh only.

- -

 

- -

- -

 

- -

In this picture some elements of mesh have - been deleted and the "holes" are outlined in red.

- -

 

- -

See Also - a sample TUI Script of a Free - Edges quality control operation.  

- -

 

- - - - diff --git a/doc/salome/gui/SMESH/grouping_elements.htm b/doc/salome/gui/SMESH/grouping_elements.htm deleted file mode 100755 index 0231e5df7..000000000 --- a/doc/salome/gui/SMESH/grouping_elements.htm +++ /dev/null @@ -1,662 +0,0 @@ - - - - - -Grouping Elements - - - - - - - - - - - -

Grouping Elements

- -

Create a Standalone Group

- -

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) -

- -

 

- -

- -

Create a Group on Geometry

- -

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) -

- -

Edit a Group

- -

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) -

- -

 

- -

 

- -

Union of two groups

- -

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) -

- -

 

- -

- -

 

- -

- -

 

- -

Intersection of two groups

- -

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) -

- -

 

- -

   

- -

Cut of two groups

- -

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) -

- -

 

- -

   

- - - - diff --git a/doc/salome/gui/SMESH/i_blue.jpg b/doc/salome/gui/SMESH/i_blue.jpg deleted file mode 100755 index ed3acfac2eb212d536dbbfc2b4d47c959747109a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1337 zcmaKodo-CSk zj7%T`3dul2X$#ZEkV8G0ltU*gehncg)*}8p1R}!#K@GMrDHws1q(OBN+#sIJxo6n( z+Tur7x+dNaR1`B|GC~GFfD$j;xSwmXa&I3Wuz00I>AhjwxFIb&zn(SSKEKIz_U5hH z$Z8yPI%={7Pu$)ZVh%U(mWG|M_AHNH7VT6BnZFpx9E=en$p|1APcm z@qG9k8ejTuRDy$@gTLl!%EfX*57!`EA{i8FuwdQ7bAzGlO+2{O2S_&UyWRqzJlW_y z(LgXxaC~pwk$R^J(#W`8ENwQNuVeAZr+({bMA7W3 zMoHR6xTnO((?!{>B>ZwBtiNq@@b-o7S8p%L-JGpk;?JrR4kj8|OsC<@=$eg9dP z6*;$Q=>`9?L)+lS>yA~n9j|-um>8NG<(NG#R}Kz1ZD0IHMP5Mq5gGAb$;iCPxDso~ z>wTj!Xen&T(rU<+II%C%=Zkh+$StVT$q~m*SZ5o`&rfP*9dbx7H8M6$e@CGToG%MK zSD$VZZ3|JWvk!H(5lI$a2BA#e*e9RJZfT&IU&pJxSjU5-ArHi(gpp%4ygr1wYwusu z(y-sJv6_)ylu>Zlvf_eUM?`E#P3!boUw$jK*OxYtEEHtcaM6Sz-$T87b@FRJS2w-6 zG^KX1GwOripJ`*nGX1#X=+XQ(>-Le`=8-9us$DaI4KJnUOrkUD{8H35Fw3Sj7h5h! z>HVyE^NZrNr10uKjw+{d0(PEwuJ!vef zuvoWW#$hPkwQ?;;nvEB3Vpm-|p6$i;@5tD08b~YAA&{RxEVXPUZ-JG+QPUr|V_F$@I zXS;1p=(tK8FGE-@oN>#YkwF_a1tYA7egj zW^n6ief`ATK1SFn+ag+w|Mfht$g_4nx(AM=>_}YPPhzXae;aiDO3h>4b)9F{f3T?% zo#IdMPb9KtvZ9;I)c()C6Dqm=1DdZu@k`x^exwvg}d zoC|z$oF{fzlv{Tlz2o%x$(;6>oL)xZGz)qR2<7%s?>*6}l!k_=7}1b~)FhaZe!Mi* ntsV1Q$ocz}1}2fD+RUKR+?970I}4cV<-EX|YKN=(__MzOO5YZJ diff --git a/doc/salome/gui/SMESH/image119.gif b/doc/salome/gui/SMESH/image119.gif deleted file mode 100755 index 5294d844dfcc2fac17e27c0d501ebc451f6570fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1957 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 Fe*qGGkr@C0 diff --git a/doc/salome/gui/SMESH/image19.gif b/doc/salome/gui/SMESH/image19.gif deleted file mode 100755 index 3cf748a5237a39419c8dd809a120e96c3cda6bc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1196 zcmZ?wbh9u|Y-O-u_|5&}Udi;wp!ICsf-Zd!73vPST#n3J29o}O-yd}@y8=4EH6 zFciJI!}(y@`BvL{u3Cwb6@d%fC#&gb1*9LIBRiKZVbvFf;8i>uqja>kt_p36nwYoe zRjKBUjzsNAy1%!+yt0L@+376D^tV?Ui(fz5yL$SH*gY}l-??f{PmZ5&%gkTKy~W_z z)_Pgvc{$TIMIFpP?UlC1{KLbg#qXo8?J!Qs*igGuO>eH`tIUf<{_18umao$HZ;tME ztG3RLnXq^MC)s_ozu(yAp02IVSNJpeiF4(yvR}8#Kc2oI=(Yae^l$IqnQmp9czxgA zKi_sdySzGHf3DKC)rqH@+1KrQ@Z+akxL7pTY7={Xwzs$zylIzOhya zX8$_5Wo9*3pPP6VJ5$8$##>jXJuJT&oAI!{yRqUQu8B5osySmmG#$|qaXbfwK^v}(vfw!|_PVSE!^FcZ^dPBqg- zlbKnOQBu3L=t6bcOi>nDE0t0zJ6*7PzyF-?eV%#V>;HHApYieac6H(EO&P<+G2P(P zKR!M2VaMm+h4JEUQRA?_zCMG&FflQiHEWiIg$0wzw6U>qaBv6>4Gjng*tl_{o0}Vo z=cC}@c1%nSprQ8q-rn|NWh#zg1cs3qMgcgE;W$R%7>Q#Pjv@LECoqD*NCKk>4AD<< z5+g{ABr%G_5M7B=7(rnqg;5lSV2v;mVHDCK0wjS!1w6qKO@QM#f#W2OQ#g)jKG+ik zP7*jp;E1M&Yl6f{5~oNU(Q4o|LE$8YQxuNqN&?{|!YPC!S||tyr67&w2TmXXRDgjx zc&oDk2QWy2plC}#2^*3mD3U<5Lr_3c1Vs^ub_;4qL{JC}>70RQohY4Auni8N1{8r; zT_QjQCIAmGKpMS-0+J$0M27`tfEe}^MIt&o@CMv)O(7D|Q9|~RG(-zoLTnHcqyjO3 zZ}1A{zzv9oGLQ-CXnq=0hYB#d9>8H`TF*?5Oq|uYPEa&yJzJ-&nwUR&9Ud4+4ru$jJ&=7Wfh-0W;x+f z^0(aB*lLIW7H4jKYLNRWW`+9U{iDnG_b6Qd>1naBJYf*vUa(gn_WPy2DQ>vGgAwxJ zTtIf-fS`Q8*B=)-E(6a`ANy=z5xq&P$y#2S6q52x zZr^pnDKM(*qPy^^t;n#a)HYSm$hRW=!73|>o5AWuse9a6Jt)y-!PITUWF8 zCI?K3&MmNXPLW+PUBIzRna_@v`cHFrmlp9__wC!5Lws_GjXc<&tz0JL>{hCHjZ&3D zjp~c!HyhpG<(E~eHeaXu%xrFCP4TlSNuRa7C#RlQ(UUl>bVR5>Je+ooYo)er@SF%g zpR10%%n;d`zv^-*pMI}Ks6XJudcEE>a_RfqZ&tn;Sf?>%b*)FGBiD0A4vo&(HSn9D zrMmohtx#`*89pQpc00`18(_vgUElXdTWrmRDdR(2^B;2@kLVp|&aKpI7C7@>CYwm? zj959bS7Nd@xm@;6L19%7q`#p_LqPqkUp;-dc;7k6iy6Z>{*RybSAq66o1IFH$z zW3n^najI0U{acHs~&h- z><$*J^_tbhG00OyvP_5WByqnoW+wCHb<-f4ovks3@bm9Wz&iiQ}rgOc!rwn{V5R$0sbk zkZ#Jx63v%hmA54LMr|H>JXaB{Ie2Q<3)vTTx7Up8qP55TbGj#|u{KuLhMh3BJ7geH zxT@GEoTTc7Wtwj!-x=Eljnx`|Gjqk7mFbIo3~&Ew_#y4( zLb=sfhJKb@#ukZDcl6bK!sFU2 z*3*?NpUS|bEN!8EfRg=vV{1mGR_=6B>A#2Fmi0_qiJRU@+Q5Ti{@&FuJv8z@pRwWUEA|7Zms$HjWy=miwkXeJB>p3gg?7> zxY0dq?TsrLPZz0(8~e@LZjgA;=IAQc+KQs*7hGze#qw6YOSxkEx2%tQw^`DOZN;ze ro!$LC&vv>o=I62 diff --git a/doc/salome/gui/SMESH/images/a-arithmetic1d.png b/doc/salome/gui/SMESH/images/a-arithmetic1d.png new file mode 100755 index 0000000000000000000000000000000000000000..d34a5e24cf55507697450e297255e8c99a9c6698 GIT binary patch literal 12239 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 EAK@i2JOBUy literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/a-averagelength.png b/doc/salome/gui/SMESH/images/a-averagelength.png new file mode 100755 index 0000000000000000000000000000000000000000..70e2afd26dd6ed299365193b2073c28946ed0695 GIT binary patch literal 13679 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/a-creategroup.png b/doc/salome/gui/SMESH/images/a-creategroup.png new file mode 100755 index 0000000000000000000000000000000000000000..38ef5a856a6006850c5ad755c783cfb1bc6a351e GIT binary patch literal 13788 zcmb8W1yEdFw=LQv!2$#e5Ilq+L4!L455W@}f?IHRmjJ;v1a}CM#@#g#9D>uhySsB2 z|M$*)_nmvrtN&EdRlA#AyVqWO&N0Urb9Rt|oFv9mqNflD1Vie**hdHif&1Zwf&@Mp z^x8LtKwd(m#DtYTf7_jPamRJI>pYxTF;z2{u2okHC;RbR(=#ymUG0!2cAP2p=vZf+ z&xOt}g#mHlC$pI^1B`_gY-|o8m58GT0`FRVo(5)mS3QsFjg@xg+KlSkk6_PW+!P?)MnYr^9Piwj^*4yU04DK{CV- z(^PbHA4qSz^j!U(jGKHDL0PmEO6y+8Qc2SpOce;m0oRwiTcifKG$Q9|4UD`QIYQ$s0iT@+1IZVG znVA{APUIv}uK=H!Y28h?QkhijRN2wQ5xy*4Jd(k-ak_&4JR?0l^FtHrP#>ZF-wat6 zi(3X`4&LAp>8=KM!jQ2KA^41cO)G!=_+fo{WB{3}u=K62j(RpF5-hDW%vSli02(*@ zr}{~ugtV?MHXN?{8Cp4DFkRl8YJk*8mXb-kg7;iIA>TiDp@H4d-QLAdU28plO_xC# zu{;}*>P6{FT3cslga{Rc`IPnBhkPQgBCIx#=joy^?ai~&$F{oryD9i+k`@+pL_~OX z*@=dX*?)Zg@HR;%nfs7FS3WI6GvKV^}!6RwBqw=czuJ< z68!`Yw^Yr*m8N&FR<3nQwLiWDBdMAOb%lfA75=?s+R}cl^Bsvc`N-iXf1y}5V$|A8 z&hTHDSZlY~LeFPZCL9Sw*u5dz7@Ch84>-5F`UkUHzARyST~KP)*$Wp>WWiv&N9f|h zBOfv>rX4FRXA^%1VCu8KI5JPi^0)`CjXMgF_VN zk7k6qxIgcMo=tp-C_d^hk@faWezqpVh%Z>W;4=dqarJFGvr(BTG@Q-X3Vp5DYH-|G zOZ+Q#wY}a2V+w6)-V1a!x#aGpT}&^g`E9&5(UYAe(Rzp#!#GY^c^N7yYR0ErxszHm zyO`eF>tF8&k_ANbl?yi}m4Cz0sFLfy6qW5TY1U!k;P}8`8bVjH&l(6mS>7o|3+m0+ z>vsXouSr$3csthsG#|M^2YkEmGgPC&|K9RV@wOLNBYtch} zXuI)qg$}+xk|X8fY{-kyiLqZyBJ7-`(?l#pVK<(aI1*V=&q#R{l$7qs?Na1KrKB#& zlE9WB?N-XBM;lPjAj3Jq17buYEZn5bq3m$NC zEl+JsECzR(G~+S7&$ILvjirlIVZ{#-%JgIYBvX+^o4tcV?oyw7Xp*}&g=6PMHY}5} zu)3I$f?JhMcU}3aF?Ra2$z8rnuMb);YsaP!Z8+PGSw7oy|C;otK&NwCU+RWEY(Us^ zqk>4`T`u&!^EI+3PfEw+^s9@Jbfzz>&zJN^Z4NeEwB&hvE~Y6FoEO5GZhma`|G2)} zhZ*!<^&Y&Xmi0=_n)i@M6Ji!KG8P{8q&Gp8W?9!>iui4G2)}xPBP5%p9tSz$#rW2N z-*BR)<+_d4DK{mD?_MS7uTJwi*6kLY^<9upPHa8)qUvpl-fv+~L7Q6T-PeBkh?N#! z6>R-;uUtfwjYNLzDgOIE+BbK9+`k!TFrdNUx7d=4f3b-;mmnWjZvB>%+`X z?IMoaq>B%_vdXz*9h18(7aQuXRPW9Ptqv`Qq9;|QFZHg8D=f&{x<`vI)@M3hvaI=W zJGBNw3E3_d-xGx>d$g=iE61u=iN7zroi_739hp;? zX?AUFP@t!G`>wx06%C%!5TGlHjN5F?i8*lNzpWPVsAT!HRP6SYw9{-nzoEgNRVZZ) zcdVLCUQjRw*>JD5TGp?3N-=QClyt#Y*s4Y6?W9O{9!f}uPi>comKFkUiVxVjk`k2Y z?)GoJh~Wkft^%%&yGP-ig$3cwm_`Qb4EU08NAkjOy-}g>2$L6mr#GIPPS3>wTB)c% z$RoTM?O=Rx?`1XU#d7-e%g4g zWNAtaGp{@@aXYtkJw-8?k5eb@RV|?Vr9C^q_1JPPqgV~wCZ;kn`G56lWl?i z+_sxvR1GJ|xEyV@c?9-hxXXZM4^71<;-P$(7w&5g#|0;cPy-mE6PPJ zTTQ6K;fA=><%H7RF*}5O+v@C3KSP}lx+xn<^JpMyg;i5!DTg`i3r|DL=@q3v6;t0< zXJovQA-xb9)nl{3P+ifUle=^9g0+4hbGsj5j}>fAzGNnUEJ|GGfVvP)q3Lq9nQJoC z>L>^*r|pu=vn;FnZ~C1dQJ+0CY!AeaFB>fRvi1^bmUNIgKqyP!8f94$?kcyINgsC9 zn_!;X8=JB&H0^0P7Q)Q3eEImf>D0n(9gW%C&7Z?s53T&Mo?;`rjqA>$1b*@f+K|w)#^L=$oK4eTX8UIpZuTb;O;^vq%Z4{@AT@i{DU-hgZV_G`8veU8; zqFtRj*?C<)PdDtg~Wec7-fU-ffu3Ay|Cg=NU+(UGZQb*>&ZlE4^qN&QeVpc#wthYo zu5)T<1i^syY}d!hKCc zb1eJea@T#~EAqyvm*{~N{Cff#SEkiahDHJitI0j zM-1pk{dPw9x~>@s#kap@ax4(ACig8%J;4ktR*2KS6j-%*UWhQJCbQjjO?uksyn+{e zG`KvnhWX|83L6H?q=`$UI>wsA~y-V z6aE@Bkiw^Oh4NZ_D4q6TL|$m9N|W#Ebi4EG?{#O-TPG5^>&5{C^+NoQpFWw)=3v}j zpBGn{8}TM`vCnxQ+t<(41PqYgZt@;+IH`!EAg9Rv?rT0>jIwF$?rZ3~yS-+4fo{Jw z+HJ#9lya-`cl3u6yV^J1-vRoiTP|y>9_DbH2H{@EoGh2eQ*tT1jD2Ib+Oz5sqdoqG zLQ!dl9G)o>b@g;2+?wt6VzTkE=~~f!k2J+t{#BM+Y6R58AEu z5#HR~Y|J+cc{bfO+;_8ZTF5tUA#*_Tp;XHs5f)R_a0m_Qua~}sXw+DL{r(;2xp>CU zpMIcJ4WtPTc1P13o*o;tcq5F(?uKf2Q=oD?eYeI9Q#6#LXin~?`02|$D>98c%7WsZ zoJ`VZ$OcMTe81s|tAJ*`l-Mt?-l^Ex0;1Z7=B^oG#O?KMlb z6F%I{Qisp)J)xhnJmBJ4YC9BKA7aniO8W0 z*~j#=(w~Vcg?+qwXU8LhC&I32P`>k_#e{0o4@*`X&Oo1Ijwy#ikysO~n)CSYWI$$A za{UJd9R=UwPnI#bOH)dHtQg)BS?RR4cp3&uP>aa>S&#GCy*VX{#EM|mHRr@Y#*5cW zbkR0Uzh|LXBBSr%4CS*m**?K^1VKt!R%uPASK1U}q|h!_Qg1xGF|~5+T||Ju%Jw3g~QDGE$1(sfR zNQ5BC@8gjB?#Ycs%U?>L6tx4spW-EpuyaWzX;YXS)8FV1H+n})#)kBau?NEHD%#;x zFDo}&Q7KI29u?u65{r>D@oMbdrpVv6Zo1=Gii~2q{IFsiWe*%?8)wj>q>>BmrtLf*TIlg2*DK;gGZXtlfJ)A3i6N-EGnD%jJ^t+xKV-@a_azPOp5H4F=T!A&8I z>eY}Ei)qfxtSp4UB>c`LBZA|(>;2L%n>b539S8?Ac7um)FaqcEMkgtm4`OfZ(k4C5 z=R2z~s}Aq3_v>M}O(dGf5aDnB-X--R`r zM!u+`Ah?*=_ue_l}kyo>sW|3O#HqtvE(MWhDI5PTQ@pHr; zrIxp&z$!qQlHT%?2gCs-r9h2Z9$ny;>$4*26_X~BQSj_dGnzcn^Gp(0%i^#qA5P%D zxD_T;ln$g8dsGxV!;u+_m3g*;Rfz<$U`7*>qMZYL&)1(nUpuJ?qu5})UVsfv?&W~I zOHTF$$isljP2t!1{Q-pj%|p`?^-7;dzBP;f#67aoQ{Vksb@E0=tcyF=`jdLYeyb%g zH(mIw_QpOwn01=x*%C4uAVI<;)ELVY36w||-WR{!XeQ@a*`nhRuyhT3WI0))i%!gm zUV><^|En1*({PK#8f1C?4Zp5~NLY`Ql$363G@1f5W@$-piJ)^NUxm2^pD9AtBUDp+ z=M_7{^Q^ciO3836LPDt>{Zc3sm)n53;N5(u{r+4El(|UHq0JP6FIX7~oRBKZ+2Du> zOcxiI&?Y~!Cl}IMwat44JApivVE5_D;ISN8pT6iD?+ zGop8^FY@uhJb97g?U!UkiY@sp7cvbou_xOT#kpq2Dy*!m@8#qiyKQ5>5x1P}POFxE zL3M3R1=a|Q-UUkdy=}vkgDE?aKL+ui(aszkVz*T+yLqnbK%(azbB%7OXlVH(j;It{ zMZ%9QPe`+R8?~$431{n_kabqk=z~H+e)smG0r9p2FE>+Kt7IS`BI+qnEk{8^TOJs4 zT3X+i^wbhOUK`9mtP+!yEI$+?uJst*4L1Q#j6uCBbY?~)mQh_fcNa%wRMQtx0~(Nf zHdy6RQaELh(pa=>>vpzh(~!#VVhbH}tZNuEU0rDP1ripBq>cC{fDS5*6ZKB}AGT@y z^0dR&uqxlU04l9|eWZpHU3ByAZ?-hSIrKfs;*XhbYYZ}v6U8Q>6M>A3jBpcekJ}hx zv)6vs5|89i7E50*_+gPr|9gisuKCIx0RrPEi}9%vQ>_wH!c#3{GdR{~%q(x-bZ@Tr zuS&-_mP9#5a^^8(kUb<0sdgp|wklXIRNs#mL1(%1lhpht=}(NU=;>#Q^qx^?Cdy-K zyJesTft~Z;sLv$bH)Eqy5sg@a#?)1b8c@bSlZ#8utqe5a&vvIOmruQ#_lB=H{LCzT zjnX{uy}a&imxIvBIg?ei-Np_Vphk&po{B0MMAm0szk0ysy)t%2*n^SsO{q#mbz<)I z8p}6HCFXgEQi?VO4!c$Pl$1ssje96Pr1)xbF#d#-_O5hClOn{$#`*&kVVy}ttIiRH zcLvc1e_V~z7|K)3nyho6*Y6B>km0l6z&c*)=EL zlV&~lTCrt&eh#c`SHS(^t)1au>%>G{s({;34}EcDYSdoTZi(eAFK1(U5U0gdWL#Wl zWQJ%wpA(bN-34XDpa+SSm6ckBajP^cb5v^T+|O#ESFaxV&b5^4cW#Uq5|evgP&jqY zU?|;jDJsKLH996HSQ9n%hfnH+viIuu1<9Nj5J0UY9Wj(iYh}B4_5b=9xs1jIlg+SC zXMG^0FOeq%QJzr;z}?PVV^V(-=i{-6m9gjC#J>v4c2jutsnJr^-YNaCmRvjcTN!@?4^-*g?mp6XH5ZFN6c zsxS57gWldut@(UYO7)y8THcLSW=@dqB`v2#79Q!3Ut$RKYlz1It6*bnC76*@#5xq zP_^2Tw5h3yHj!TPDc~J5&dXsfF&Ud=?hCEd&A0lQop0Be^#g-~G90$YE3D?pz(U#x zjl6s(c)_L(r6U;K|Ek|vH13e7gekKJ=SVca2qWeSZ=SnX>AVJ@_l$%aAkgEzJJM+zHV8f4gtLI~r=0~P< zhbf~ku9AvPrmGmi?k}I7R*{p6h>G%nDB_y6$F*uc<&?0>QkN98gAzZu&j*3l_>3Cu zpk(dFYr*Hm#DUHk$(5g|nUgiB;I2MdU{DTOmZs0AZjO)1p4bMMqB}@7{gRblxk%@( z;nLa7O`kJKwbT|7A|1zM0Qf_JX>IWKy>+9$i&KR2YOtd<=SNk8>3Y4@r)zh1Om}y8 z;Gv?0{i)KDHx39UbKRhzmWzL{qwsQfy7B=^$D6BCS9{~wtmgQE&N?_eT+H^115jso z-DOl{?CZ8y8}Q~nzOC0x+fgQe$11Y`@zV_Je8$WQ3ZZKiT6N z^X+Nrq}r`L2_IF}_{7E&N0cW;cSk$gmUgvsxf#=om)V0O>;8i1q`W^c1uwh}dSegA zRQAZFMb3~-e1nUqR31vc{U#2C&(Tw^O`5qb7ul$|;#RtlyRp`I!|{cnJGYIE&CPE6 z{KiZ+TL=MjQQYZh><;EI(rHJb5NlVQ(TKwC-}66BulG%o*FU^FLyqLM=5R?21ZqeM zv}5@H5k~*>Lut#ZY9T@>3I$O#FR}(8J*RA_6n?~`JPRv_Od^4QJ`4aZ|KD9*9XSQN z5|@u^94L{@)=|gFcSf%l5?|ErDFh})iz@xM%*a-%1rZUc)S-9WcK;hz+pNa8uba^b zA0X^CFux+@mNR}I>WD5fS#e%O)5@*;!iS-%zr2M;g5bQ;45+ToI zfFyna0nv$xA9j9x7Mwmz$cNGS8B=TETO;{?Wzqi=d2ts*zl)6iqNT2K`{49ce27+s z5toEy=j8NX^uf4fxluXa0m=bZ5-4poM#N=F;?;Ox9DW{6me4*i?=Jgb=R56@6c>9n zO00_gXIieJ{0U`9riOh1=y(ab7%sf9<%tNi-F6T3l$<){Y8| zE&tDyyr>`tD>K1bswLa#C!bbCvlIXFJ}G9)4b6I7lGV^iNHWv%&M6QewV9?Ofrc_n zCwTuQsWlV%hfDL9HK6|5KHmIhZ21$J#_!-WjnCMU@Dze!yyu&pkGFJ zvtDr8zZhB0iH?aG!^%h2IbQ3>sA8fJTmJhJq1t9yLh$N<^85GilXuO#JCn7Kg@l9* z2Tf}vqvRu!=5)4kMA)A>G{FTOKbXg)(GnsRFH0pu6<`vRuqmsw{wZ$Sx zxX${}O#oa5^4cq*@8WQoG%b!aVsU)ha`h=dY#V@O`_uaK>j+>jEYD{Rf#$?PgE&xrPJ|v+)vlxNWXMyKG3l zt-G>|dlc3wB{lUQs@0ku8!0H21)#Q4($av5lA#mv2cCr5+uGR$?cl3gHUY~kIyUxC zKi53^yJq#PC`X1}*pU*H@%%3Kt{U>z`9O#4?)o=$-0nZK+4tE7N?d~Z{7vrz{}c)j zw8|!PN9E%4i_6J9gHTaXF=*DEZ1otkgKV)|XhDDgDk}-1xz+`6aj+VCE(^d~A(Qn^ z%%Jo@$HlXT-kMLo%@O2`x!!9m?qPlP>ea(PfpR55S##fFXaM_#S4b3 zBIC?XF*d#SK-=Ee)YN6>a8|Grs#WF*BfNh8{;X!>41nND*xR!c-h~V9_%>X90|C$ye}THeeeaG1=iE-NQzaOO3J2q zci?8kp;N$wKUfg{6H4eiWL!`d3OIW2MS%#ruIydZDrn>W8oMcOx}r1F){@p6jv+@e zRrklrG%-GMVs$?~RjEw8ACe?ry%wG4^Bil8Wd-h$Xf);nI)?ts1N%3jUfpU8cG1!W zu*(t_WQ_jB3#(`?*1LSa3rIsbp*Yfdm#ACe(KsZ`n#nh%;iR=ozVvwF2pY$EdPD48 zcP|0)9cYElB9i@!p^-K-*m$6|K_yW$1-VxDS-XP0E6TJ7$7}i@l;tx9Hawh$l{75 z0$h2XUdHH@RU8JXcjv>e(~yl0SRdLy0Jbgboc0H3(mWsiAQzy2OB*S>Z=NZe#JRG% z%JO9cYi%F}ZPHZ>G!WL7?>%JB_hwa3m*}36@pmQj*c}|7W=T&lg*z0gR~HT2LO|2C z{l?{(o)ocQ$rVQY3vJ0J65Ww(HqWH+^x#M@#n7DCiHFObc1J5xEu60SEp6gxwa$mHQ1fw} z_ixW9D_n4yi(E@J2!YCdWg?BU-*`?2DK{L@ySuqGhu3}E*f8#NAB$nrzd|STTC$mw zcTcOeTW8h(6G}IM%f%SpG03#mcs{S+Jxm3_q2Bb`a3H?B;qv&wbE-Y9QZK%`0T@I@ zPoLj&%F6~2=X=%b!}bQ6cs3)s%404>JV|r3r|7mf#RXTULO%v z_ek*kN-VZH4F?jt$1T(WZ-!MglzA~5OmEJf&r!V@a@4X1_#H~jRW#*jT9Eh!b8kJ( zb1lIrRao)4A?}-Tl@hlCfL^UY-r!W2?(m(X!iLsw% zX?5@>KFz+@e6Z+FwkI%K6dhGDSgzvv@?cxW`H3fUEw_|aV`taQ`DOdHWgb8491xL_ z`8+hEJqC)r?(ZOSlBs6FL>0(!CA?qj_nYd6nMqn;YD2V%bY2`G5fM(I4P&*RjMx+N zx%2_?b+&DdZf6ds;XK#d_(Eq46KKi4d{A)oIbw#kV+On+vm{s$Y+MM@6V4R6YK2^rqnfv;TTxUzabX6j$SZ?RX zq?&f_mwWMorDx{ztx4A$@`KDCse)W5x*LBp+z(ojAAEu0CfIZhwt;*m7iXA*SKdBn ze#AZ;uRxjp!4Hy*ATa>pXZh=Q?8FpZjCk2$a@H^Y z4!|WK=$x0k2^-MlEq6X#;*EpHOFlCzxEA%OR`qZnELwP2YY!m9HEzh31y^&EaVrAd zOpN7kLP^Fa&jPM2%daj{H5VU16TBRpI5aY)w5VVCVR2CW4>-yH#b20e;ew!?;&q@< z_(_lPEa2cK-BCjQuu^{wAWTe>*--jn{j0U{|LaWj7G{|S)#Y=KYIy+ZLjk-w-vVhA zl_>9Hh%I9#)<8D}?19K*%GHPgZV9YL=lBN_L7wuy1vM_p&OWm=>K{5yrojdXsM@Ac zR8$nkXIzS{G~lI*ifY=v5)+N`HZy!hNlD22C9gi8Ld-YP+sxl_cW!l$4rS;i;N=N0 zz~vWBfI|p_9sMD;dJ9rsVpcF%S2Tb{z>-&0RkbKjyAWU#eDef!OVr|^HiS^9>iv|f zC8-O&Q)r#9y5w9>v-Uj~45nNkZl>yGF#VBWpiTCf$~T&PyB3R?ny3iDn?PWeR^40i z@j33b3=T%X%MI%@Ju6uSEbB%#n^SMVm{xPsorB=*&Zh^wncuyqVtEsF?{OmpTB-`W zWfNt0Jyok}QZ+$qc>{4l1s*Pp#B-D0X=&u3K^_adI$QVD@88>eXb93_bR8WXAX6Wr zorKpu@bY*~pPh&$ssG_Kr~Nta!p`H#(ay=!4knS`A}p?iJhm$+VB^{a@wY1)#!&MS zK3|NA08aHDgl06gtVq^SiQ}%C;N6NoS=u!>AP*JBLq2ghT1zQTbGjpZNyZ~N7{LET zC*<`5NXt7rFrnoZhGAvi0+SF{G zH_n|#fC~W(r_^8CY$q`_TXFVg?DGK_jLi+*qNyvDc$kK z6zr-n89~8BGrIqJ3r3@`u*q6Mtx1XHqH=tCczC$_=z)M5EVO(r(5#P5U^6^AVUr(e z_VU8P#k~ZEOwB)qXk#p&01k(rY|Ld1dtU>4fMnW)fQ)P)VZ?}Jzw^cb-4_Y-U*>5l zNBvCqP0v)TYGblRZzYUrW@p9UV=)Ls8z8Z-85zUK1YF-5AG`#8pYHyCs0jJD^e-wZ*e#nb4Ix*v!x0twCaXOd&z?D6)s-D3Z_YP2FFSnr@RV!LnbO*TLkCfEs!e)4I@`A-+}03p;9Ua;MKS9X zs+`J3)F0E2hJmpPnoE#|+wtkwR8%aRQBwT13sS&b$0b%j?O(#BmeFbTL0nl|dlZ?J z)a!$Y7XMb)M?ckLe&_MSET?_Qj&hbOUw$0@`x?|mAF>(0Alwp|@*l95UXU7?oIPCc+=PEL*d5`g*7 zQr1tXCm}ha*b}K4xLFsWR0Bo{6=eKbH~1~Du;*;I=LsT`&E_x_#Bt{)*)LA(2b#zB zGzh7I^j2RY_eO(3yuGPLX;;fk)$h4Mqvefm=XDmdAYH>#HB3!m{ETAke8axS)@KUD z0O2&YsS`;zTR9$|MdlCw9tCLWO0OPhMujjTGkVU$&C^LkM9Cxe|0-C~QR;!QYA4i1 zDS(9BwKd9tJ^v5r{`c;QatbqUP|C;CXzOoSOKLzfj9=ovi_<`+;Zj4R(CCH|l+^Et zXxGBkP=+SEc>c$YpaaR+-i6;2Ow`mlQ<6WVueJD0=C7d9XAT_Iq1`X59mbf!d#c@O z`>ubg!+*cff6O0_Y46^?z7=2zCkr|x0_*B~Ov35~0|&=g7>Ah}lXg=d@M3A-y!rKs zXLxN@l>tB1<4n~blXzg)t0{#~a=!a~-fRDYpZ0B6Sfv^7jBQ47y@8?O_qa4kz@}@9 zIvjvM6Y0tj1BMVlXhEj&wrz!tPHk=N9$+yzGkwUoM6GZ_BevoakGa?-0kka+yK~dh zC$^NieZA)rQHo;TlzjhQ+;naL0h zco2&Jrx(y~R^0RlI8Fd1DVUifhMd9;FAf$NoNWylNU{Ag0(sMy7fjR)O-kagEEwe+x#O$0lzV%(F32Rp?WUPhIW zknp(x|EUb(#r3rc@9l85bok)Mi0t8ksb^slzF_@;PYlp6Eb`iKv^-Rc`?nAV?W$ye zGT1mckKX-fYP2g6T&OU`gN#`Z)?C!Pq zX#@pRIhc!Eb>1EvgNDJJ+dhlKlu{=@sKB5!0DB#&#A;p;m=%!8CJ#R8SOzfZXty=` zMgpB&`2T9^P2_Oo84_B9kX>0{w_7_QWWYy*!It*-rmN49j_fz>86 zf{L)C948Q~IW;x$y$NxoBO%h}0ZHr3$uwMCaUiTkL_|m$S9@}%FE1~nQc`4d7v#YG zvdf)8Y7q_ z-`Uxr%axRn$jsDZO#tKSlEoAHOzd1Y{v0^GDd98({N2%LsrFYct`fYE``Nqse8HrD zrUIHwuO7_Fs_(Mz%F%1KifV&HLm8ZE+xDC9wdSFwwsdB{l|F(IF7I7_L)94B>g&z* zw62C^DY0r48R}2vdmJhbDMYI<+fuNVOi~D2sA20(H{JCAZ7+ z!nZ%nT&_HTO|Q8{<%i{fGfDAxs5>|;DX6LsC5_jcFOwWeyyNFk$!0&7DYS-PMHXd| z$>2A}LX{h}PQ_&ElSac1{%IcWvA_8FO^k{7q%)tSfuodNwrJ>u;&WE_PRT?xPGv??`ITD8Mu`U!6hTAZv#&6ij7o%Rkv zA}B*BN_duMcGd|z-!y78S}x};mQS}JtmS=q-YTip#4s>`113 zDGiW;#`dPfmNBy-u!ru>=AQrs?}YVa@*khH`NN-rKyb5d6=`Z_e1zhuvg5Ddp+W0cy^spQfHxcN8e|bne_%a#2M{oyV8Yyd$h%X h@Rkh~n1S4pPq!T&C6=QNgI{eyq{QXKibQmL{ufzHQO^JX literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/a-createpolyhedralvolume.png b/doc/salome/gui/SMESH/images/a-createpolyhedralvolume.png new file mode 100755 index 0000000000000000000000000000000000000000..532eac08f0457d91a8200875acabb6dba41f8083 GIT binary patch literal 16641 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/a-cuttingofquadrangles.png b/doc/salome/gui/SMESH/images/a-cuttingofquadrangles.png new file mode 100755 index 0000000000000000000000000000000000000000..ff9ae68e19b80a8f22354c88265f710404c58fc9 GIT binary patch literal 17452 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/a-deflection1d.png b/doc/salome/gui/SMESH/images/a-deflection1d.png new file mode 100755 index 0000000000000000000000000000000000000000..57fd8597a10f406fa8f410fd0fa37332c4b61e1c GIT binary patch literal 11003 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 U#YRTp@+|11gq(OO#Nf++00F%HJ^%m! literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/a-maxelvolume.png b/doc/salome/gui/SMESH/images/a-maxelvolume.png new file mode 100755 index 0000000000000000000000000000000000000000..2611807fd6dd72b1c12f6c4e5515e60cfc943c51 GIT binary patch literal 11390 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 Zv;Jd{mgej(_#ZEbgs6;2xv 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%0D%+0-K_tP5J7->CE(=54t&#QrhWWI zhi&m)r4kO8GjeT$`6iJ|0=vVhl%K;yfGSc-I0M3!2kad?#C_qO*Z9}x(^}8|%>}DU zc>Ft>Rc$=}gO=#)J2s2tA;X$xlM1tKMlf)q;RifMkK(Rx=`;s3{emI!55sotcly$v zhMY`>gVjGad|#pe1(-Qiq6X|v9n*x_{SE`#vRLI3yy?!$g}duh<4YT^?hpdq!(3Wa zGBPs23%h;bQ1Z3fc-!ty5Ve;)042*&EK;)DnFs_7?aiAvpF!0$26Q$Qm(8FbV}6uU zI+a@t0Ou3MrBSb4zdBx1-QjXNdXJ35{GOdX-WvvP&TVsVZ}9s|M5C!^|HzW-}{Ileoi z41|1!3I>PA=^9gIMa4-s8gz7AU3uvAvRlc;?zD7hV5lrEt4Th=&Gk=&d_V={b-(FO zC>ALfJhO+Hh@W|Po?w_NdwDQl)cw0VpYPy7wgiZS*h)YNvplLEaBXL`Jk7td+P1_# z0%|u&*LuhQbVz1o(>vnLsKt69`TFdimiB?*?HSBT!dUjE;LV8N8>1 zOsr{X+|F{L;o)_vQhIbl(Xr;NDh~tOhRkcV?iw5~^Xn{^l`NNAOFU{0Oj*duMQPqF z27w%D7&san_B$BE!^6O%e*R<^dO4%$g1+to+Pr1`_Fsfj|;jP5ZBH zw`@xu0doa9Ky^NHc88@%wb_Z`*!md6LzO&8aPUY-)y`=Z_i?me`x)B`3ma;w%Fd5Y zPpQUiP1^1+a1q~9f0D%jt6JE|h@8!GX&qQ)Q~OhOmRb6TF)zZ z`0`fhfon)uSZ$c>aPxi5i5nGQb7`83Qw@ZTcx5f77q&-9i1B zDE*2H(bCeoI9!&NG(!^cC^S6H z^8wpSe<1c4?23^VSI5oalmRfT&TFA;mC=}}sO^9N$tcDYDVJ5cU7wh3&DNM=Y4ctt z&;CHheX2ye(`8$Wj>|c~1DLJlI=!rPEW7@&R{FImU%4!G$S^Q4Q1v-|6`-3cbpi?s z(O-^yG~Q7nkuXqays+0mdG$)?yl}F4>;ZGPy0=#p;DLyn8~5qv5RCQ%+$lDf1GSWt z6lj1Ul}e7!DGs=PBbma8X=rE&G64YTHYKW#GUou&?1UylSK(VXz+k}CELlrKJ%9 zTSRAjEN8Z~2MlREgDx!4FuJpq`cvD0s$_yksJ2{QGI$u=C{d~S4)#AjAn70$rBW(( z@-3kdCnf<~37^-EotKvv@8+65ON%h3%#M)7M!`Gn-8aSrl_~?|JgL-g!?&A+H<67J z4~~W)=OjlUos2%@au*K8>jJke&Xd~fOBLy(0A8%cGUx#cOKDQM8ucg9MFD&^$E|r? z_X8XEozVHo31utnDNg zhH!%yd(Ni6qT^F?7n!55(7d?Y13*;KbQ;QFAgdBWuD=idYeT!-d! z_ZUh=m1EV1ZXH!1CBw3W5Qq?@#Rw8}dtq!B>aFj}&*8XvcmPZxwYZ*d&K&E8w=4}U zThfl4taXP`*?K1=CW-?%3=9jSJ;;TZ{ea=D{jX9@o8a_jsLv9RSIGvOjVq&7k>amS zv1L;pLLkNw6%}3a!_v||S?`;w%*@J4xVT_eP$VHC@dH9|n9)t9;0+1FJpH%~t_Iqdh> z?(NM*j9#B^8INVZf_zD0*|=*sWle*Fh23m?$Pu!bmka30V7AksJ81`F#Ckw*z-&C` zo5*64IT}wl;p*yYdv|3GLd?N9Ew{iWRcLl#6uZ?CB!)_PvpW>GSjECMqkDQf4j4f4 z15Ix$Dk}Eo>!1e?NcfD*^OaSmBA_9*WZ)VE%z$`3;UAcuqx16`is?#T{s57v`N^X{ zt?w1qy{|jIqd4uB)LBh%fN~`4B*+d~U0ntK;7c|(HVqAprv-C%xSZDE1G{#xIy|nJ znj7m#6HBK)oZjIBiGS>H>kh*Y1_mpvk2f&u<`%<}`@w3_emw@vAk_aXoK`JA67`qI z&%~PvRMmH)1rgB$PiZ&|pQ}>Ra-u%s{Q1wWiMqVG<}?P|ALljtYwmU1P29VK76MyJ z4x0`T!Ts>c)(4M)ONVJ<-`=*t3{^Rgy7epB^+M*?ev}Uc)I_RsztEm&KZ%MMf&{RH z_~D!SPX9l|$G-$9l+j_kIUBX4pgkf0`Il5C z@3|JqQ_<9U>e(PD>h0})ez`*dt~iDT{HRFGsUa3WRzbhB9t{4w#lEM2=fAC5|9Wly z-FgcY6vyz);sZ-6Qr6u1r1ydeK5(th|Tg^D=YTN@~ z?{gi=&BtAtbs0`co!f{+-oK^M@HMoT282#A-9|5oPt(}g_->2uF~h!Ss`&(}{CA=P zy(bL6%7b=(nYU}qx~0BErS-e{d|k!rJTlm4XjoW1D;++cy@8>K;dm;J{C}iW-$qtG zcP)O5@F59~I|7uc3Z(R)`Nt5Nst=mlz`j5U&6PZ0=M z&16t+Hp`fF&1yE&{)1G2!}@~f(1N=;1_Dks$!011b=13cu{mY?nUPN(q}G%XLj7KGV+ zYU1X;_@A~Flim?3sEs1PqhtqEzk|jH^gn?n?~(ujkc}}E!upK#aL72nftn2n4~GNp zcj}YHX*AMlYXykj-}yQ^+s#3WQiE8dr!)ZApuc~2qoU(>0v|3gB&1rCoy%^-&8Wrm z(E~Wz=3i;^wjrQ_OsPbT0kou?xzs4XDG{3;X_B@yfTo)BwAgK)VYgmy;ub2En56Xl z)ANF{0_q$vx@R+$`iS6eI@^^w&DWbrNZ8yj{xcb$Wp|e&rMpp~m9pC&dnuAa41VTw z_II{(Gt)1V9O)gq7w7{CBj6D46h;m%Y9JZ=M{;?(N@V+Q$>nc1O-4q>NRVE?AtZ!? z9H{togL(18$B)2GR5}&ERVH{8k0#RX4q4?peDG&2nSY9+l=3##qvjQZ2 z(!|+yZoZjkf8UI+?rzYtZR3_Y4VjQP`N_FTcmU=XLS018rv#+I=9}a`^r6$(dDgR& zlm2PDV2}%+97l!+E}$mtx_x-GxoutFTJ!+VwE>sCLZFZPV7HQ|!AHny_72EZ*9p=< zjb5nRDtQ!^yD#b=S<(LxrVDwzW&*);ei60&|E`L(LIm;7$mmoEx%vM1m@kQ!mAB=x zy(yG;d{J`}{%0razXTH-*EsO|wBMj6*N)df)IDZkcUZ>=GFC!5i$If}@s{S~Vk0`c z$(|Elw11lMGfrQm7eZa>qeqj8&{IVx5UKw%EkNbR$O_SUb!2n-`S183%q>k={5M|z z0#2pw?4podjmbTUH=tv$Aw1tL$EoCdz}7Vz&Y=mNg=pM+Mtdx zhrjb}n0K@*?5>-dmnj?Cr)P1@@(j$1@I*n<4&VZwpl#7t9pw`XVXW!1(#Hg^%ug@j zw)H>yl5^RB&}jY=X`#V*DZ}^7Bi?g~;b_Yo=JF4css!krYs*;pHD>er)ItNzb4hG{ zQ!DW42^L+271}8}8r~(+_@W9?m6cZ~cZNuaZVvMhL!=`K;(uf-KqBP{a>zg{Lo~sK zZ_b9hjd&sp;b)6b4E|`M>sJGNPZQSfd*_>DZ`F8KwD$HX(P?YB`=Kv&8A%0_Lz9qJ zJ_MP?EwLZ9(Nr7!@D&@$#G_ks4UW6dAP3zso58#;DX=o4Qj)7}Sd^#p9j58u_FeV# zXSoyyALV6a6`e}Q2n>djHJMF`d{M8@E~>Zjn(m(mJ*PxSH|VcI8mp3)jgrO0B>Q^f zUC(e&*-(`QQ}|r$GBla%t*J-&_sn=iMNDeN_~mTngo<3jtmEU75-`|5tD-iHV@+I? zDAQHe&`Eg66=LT^y7N~sataG|0k z2iT2|)NQ%E%qCuyK{ClHLF>ndU;f~G6xeYv@5#w~YsVwN%vgiGdyYB!ZN_R*Mf`D{)iGYCAD=97A-7$=aq)3Q#i6XqTbayvMH%NEqFmN}& z6YHGwJ9nMC?w@zvKbXbLxAr`H@8=WGGhu(J$l+i}CnyZ12@;U$6qX$8+=X7%)w6MsghGJT=3r+oa9{tPgLH9uY#zohfVX4DIv$R8h z37X9sOFxMWSFw6zs(pKBCy&pm6&*c&l9+dCSZFAEfqu>J%gq&4dBbW5^rE{bmMH~~ zq4C4~P{vK_?kA492NAti<_z2e$L3|m`nvh^XZkk6nk`~?(4Qi@*>|^^Rp&F6MJ{s` z<4tfl@9oeEHiTY4fV6p6aQpH1ln?{8AUe8nb3}mKg7301q%HLGXMQ=!(+gBFt%sc(b2)e0J2*H8h#PnkSFD^Riil{Me-Y#@>+p!Mi%la0$Bxl!)*S{_{)Ze{8LX5Qh>q9sj z#Wl8h3>>UFH|~Vr+Ew#R**y$&ux)dk6=W0~Qt)r=vCXe6xoFN+c|7YO_q@F#ucvnvT zsnDPI95Hn`aK^Ngkl!tM(pzT#DXhNsDUS5)aDg@Xj)ZQ{@2?5g3zc<~S1bFC@eG_< z!`}^}Ube+87a6|MpQe4kfc8h|mo3_!X!*wHgbd5o^3Qx$RNe~aWOh5zVFyR&WuC+E z-MrV8PeXg%>760D(nbP%eNs33sa`-S0 zKRHC?>Q7ySOWdB@x@i@~je`@5QT+nm`zgdCTJy3KJ|SUiOCW}DtaGRB^n0cs{iv2F zFbGfCv6war_R7thZ0*n8-w3QLccyRWH_8`|P!K%dg-OJ)W@^^E9}cde)-18`PwE+) z*JdsfxkWfcWWdE6jheo`p@%M2>gl?$(5LvINch#AJ>o2y>YcBuLSMRVWPfZ!vrMtz z!4q9_ar+Sau!Qni(^Xo24u)SMPxM$t9k(*Mn;vm-!Q3mQE~j&-$N(?%9rIYEVOsI} z-7E3dBYKSLWjs~Wva7@H8+Sj%QQ6J@;4=vyXZ&1SPgi#@E(s64lIw?O;VfnI`SAX= zw$*@$nm=frI1K^2bAC6lJvKj6th)1z)AE{fkMOT@Uh=RTv>T8{m}qJ7QwD!EXW^T4f;_f;qFs41;jF`{&5rO=^0=Y`kO|XQdD@So4stezh9|&HL&U8 z+vML-;^2bA!7@SDrDhZt7nfeP*@g&f(&|1`&uHOe$f$d@^^eRKnl4Mayd)P&QzEvPGkr5X*nvu~WPv1i^inVYIw7?Uo_&Atzh=0R( z|18r{-hzco&cSPa-#6x8vzK^vJr-Xi8(qi=_M3Z?-+Y`#yvGa+nvPGtEKyWj`zM9WF`y{s%%L$Gb~N zRk%yVjBr7SJZC6Qs8s*%&7WZXKHm)VXphs>oC4et0=sL!pO(U&FiKMgHqW{rKYr*` zp5nHO%yqp%@XJ)$w+-SbTHPU-dhK%Ly;s*~A3b{148Sd-%+krsd|3=CAO{zgc7jdr z5frs4#~O{FV9@gRwR0)&dWibp-maRhdfiHV)i~c`!-y;J}l*JAO0^kZh! zO*d=VEZV!O**>{GA_gg^=2hykhIYOQ${2Tu6dcyGq ziMXEiYMU3Mv5w2}b%axhwh%u1iPSp84chyHR4i6~C$EEm(bFAw-a3!HES)lo)6EgI zt}V25?^G40#uj^sHs0_fD>W10zRCUdq$UQQl`Dg#$xs1y%HLJCtn2+r(n!WMG4nmq z=r<-X66=ddYSHT387-<@G6h6;{*><$pAJQc*r=i{hz6BN^1%2&QL9B+Ol<7RHh&sk zijTjFi_0-L3KS|DjMCUxq#}#-5r`B@d+^}WbP6WqC6qsPtNqI^r0vb$y9kPCFDa>!Hhwtz5~CS z@5a)@-z~Y<6cn)82~d8PPKi!iF`I21?Kp4x(u)h05}&f&!}=>T zIn_=!-&%TUOS`AdlJ7?;a{AaPF)hC${2K9Iq*v)#+5ROnMEuRE8zNS+YOAtqsB*p~ zK82(-xoAS|Iy!jl;2)tEA}oA4j*a@Hl9{jGSzTLY*9WU@J&;#2B)AX}o3g>C5mIGb zH7Ca8x+v0l+68@fGUYkthsuR5`n2hm$Xg}FGHGBoipT0^vSXXov5wwH z;y-=F7(95$`}w5W3p+i3>tTqYQ&UE+~;e3y%=^IEhlFbfR9Kj;nrIu;xQ&J9V26Qf2ks2YL%=M zqf3oQQp~^t8U>#tp-f8XU#%&@Xwfk-Qd(N1!otF4=H|;gJBs;Qg_nDd@K5tyQJxYr zZLO1nt~X{!b^BNeuo-oaG7DwE$IQ&kmYjsTdwc14d5P-gRb*ry2+ld7c|axACifYy zKC}OfH_&ieAf?s~*Wag07F^n&o#i>a8D-s1C$GjuZja}O3|OqdF;q_`w$s>*>QZ8J z`pEb+bt?5n3ld1o=n{T>kAhxZ&0N_dI^CK|gsHz5(S5%n;d^wvGW8e(K&{!y`47PN zEjD9omOO6QVGY({6|-65fO z+!Xa{LPk_ZrnhkXAc6FH5AB`jod|puuIr=AFQ6ckb<^6``pG<=wR?9B{#IWmE1P71 z4cdH0_kw`n)AMAVjlkU-ZQpSQA_6S%u86j5dJsNZ>Su&UN|37{%iHH3+27^VAfYAG zjv8(;5#(w{c4YNFR9^Z1Qatw0Cuw{^Nugu@=)8Slh~eKBsc?cyTu#}nbJj#1vJd@5 z5F&z|=ZQKs#Je$Jp>JhI`j1h5)krFQ7yI|;QEYHRHqDyAJ;2jW&at!st7W8{_=~Gd zACE2Rok^bL{kvynb`TY%)WN(uCIK$P+-rY=Hs^u_ozUDZcYP;)_JA;Cj5%GWb6z_1+l zK*VixNvEc|S_tH-Ph^}H+eX=?>x;HllSR}gWc{3DkssDF289O1FXq~m1?Stro*ay! zmy=IT>Hho8kIUr{sF3?MF+2q!Sk!duI$5{Fi zCHd5Q8TDTFE_$utxQ=EkuYU;YVSJbUGbe6m$iQ>nJib#LTBL}@`0gP(dJ=fH;OOts zes0sQM5zC1W>S2*g~MV=!(a0ZI7YsE73&*2lK(hCRT43_JDe$<>AhfhTWNVYIwZmG zc`&`_4x3xKyE>N~$dnFAw%)Q{KNHkrRlNIu@qk+`X|`4Ah++?d`wJjtD<|_`ucctiC@{ zsJG>!NH*kHH*aX=1G1u6oBd3A3s)}(FC$|xz~U139W7Kew0kiF5%jF3c+X)_%XJg5 zyq4EQcPB>>)2q%bNDfq7=cZ}PD zxn0`jZ%=b1k8WItM!~I^71bf3p`q`3zcL2}Z-|RVJtku0GCRZv0~mQ$-Xl9{@aqO- zHP_AIrw#|Mb(TJ08j%OPLn~3@gL5^mC@dA==3?W&=}$b|ojU1xF_G!wmLTk(IGdh3 zdyUuS_ZGCxI!W#Gq^U41`Xksq7rdEJP*BphPSVq~?UHti>IQ9*bZV|Pr^BTJUdusb zZ*Oi))U>mFIxFm^OV^(~qa*Q{hD&U|#PS#>}B0!@w|k z2uj4zlS1F7e^8QPQ+`W#R)b4ANZLhU~Mc2UUu4Y*fRjo?xGxu-Na_YYj z#>&4|%KI&nbv|3;$|UN!U$A8%&!2lHr4_TFre;ED+Nol3+1x{d$$Qql9sdC(o2yQ2 z>{{+?{aO5+6uau)vO6B6e zCbok>C5d`+EE_MUJ40}rofBWKfTxr5n($nlG1uf|(l5OyKE+XqpWP27LKCh)WT0FWok>a&Jel{f93Q;}4em5HoGc!j=#YII$ zqmXdI*4g?6>k|;jLDscP_kG!p&eI%0ek*m~nJIkTm$0o_C`BqMuu!&=EZZo);s3*S zBnsaPE3y2P4`l7D$z7<}%D&g>Wch*HGCS!V(hQ37z=fr6nZNyYzI5KJ7UZ{0#Gknw zOqOfz@K2fAv6IyNE>=2x?Q<)s*=18+jtxJ*47!uxR4gt$d1G}ALZ#?8^4-Ub|3}sx zDcFY}gM%kt*tYlPv3Jkik#Ufl>>DQfrVjjC=1U7I;vvCF{Ep($^`nV{_??5Sbm8VP zy00Z>$@aWaB$emp~UXFRhoX4`@Ao-Id;OI)Y<49uF(F3Jg4u4nDx*DknVz&|L%cAvLiGKRhIA4E>0eybu7$cP zD{XSNEPlT$(%(0K$GhfbNUTngtI6GL(`UG&FK$=v3skgk>X%O9wmOO$Zj#T#iiE=T zKBw(+9t>_5R=KfI|E?mIP!KThCH{SpK}WlUDIpFwf&X4rsK1IL{$5ku3ig5ekRpq8 zVH2_yJP5tmu$KR^qr%%hR;S%2E@(6C0+;iQU!vB=8irmh5x;@@zDR3=y+We99z8-d z8uQ_3%H3P#W|Dx^tV=zP`m{~XLfqW>Ic<*l`m_D|pm?7^cez5m((u#x{kp2CoE$A( zCxh42YIR?UU!foHjR6j^CQLy%|KE*-IrUsu`xv- z55yOv74;cPE=&P7F*d6A-@eh(sCrSoH|>gysehh?OD*DbeQN!ER+iU(hOe_Tis9+g z0G%>R6t7_4#fcO!R+(3?N?kWp{&aPoEXzTCwl}BqnbJf(Ex=Pxw?;z%_xVou0~0-I zVd|+`oknMVGly{ZH$TS~c|}!L0S*A;44)G4iHScN^Y*ft?o1TA)%^UlQ8n+t$=9Hs zqmsTXU_bMYyrXZ7QdDL;{q^J0Pb7jYkvNos_cq;fTZlLJT8G+3RCqWY14ED&L7}{= zswMLJEGT={j!fk$j@X1wO>o>Q8i!IKB8L7IAt}u(tChcWWy|Tztug6eMbgsIePCA4 z=JMRvA3ChJ+~78DeE_7gvk;Y1nn(p>3MXBKOvM8og^)N1FHO>$&5K>(GVwMezbo0W zw)_PHO$+LUVA(8(-#8`z(>fX7#3@m`nj0$DVw%rq;#U?g73t<1u(@)bH1Hfh%?pQY z$BgUv2pMuPZ3E)GmMh1o`I7V3S4EhPiR|<4tlmwAcr^nzD`vX*9GaxBK7GLsh4`$0 zMTd1YS={}#c|jd@TN|uPr^YQ(P7K5{h_1R*m^pLz11D-j(!H3lw?QA2!h;fhEKK;v zpWLrgCAgPQrt>H?-T%!HhE@k}kgeof#e-QN-fwphhaGpy4A}X!Y*l7uv29D~r{F|f z-VU2Qq}g3OyIyx+Ut3pK2#{-yi2b^4hY#9BOe$sr7`9e`hRs$vZZ!HHm;!o1W?*P< zsC`IdLZ_v^7ZT5%W_r2ZR}7h|Hl|NA(T9%DmzZKmKg2UW{MK^XR3@oc<$(Tf3rlfp zvI+`5&K%lO6io!h9i>4)d=Q^lH7<%Vzf=_2<{NVi$9+sXao0^Ie1Uo{M`)Im#&lhE2~K zeJ>mw>W^MQ9BQu^Jq~6J{=uEY*~?(F9yGqY+}LgJ=4;&}sJOozz%Ltz#j>qQuVJn^ zDJYx2e_|od_wr-h3m*j~j>&@H1RD<{C-(c3#6yYyR!HXImLmHb>>%qfXHB@%boYe{eL6*KoHqM+yzT=bJxQo>FVu%}~T$paj_(94n! zq>x{ST=yd^a&UGp@utGXki5Hb&2&x?aG*Pnf7^KZ2WzI>UY&kN*ASCCH{WJ;@D|M9 zaE+_w1gvq8*I}XTB$3M)_4f8whzd7b#hp4kC?v#Hu1WNf1Ac!^*+!y-X>FAWmO^qu zd&Cy+BW&zvtgN51K8wjhTlQVir$&B_anW6GqwCmBk!CT<#{TSxS*Dhw{ z=8lPoz+Pt@ER1n)AO|B*%;WE#gFAz?!Qx>;@eWLSI6E&WaK4J7*{dk{-sV6p>amIh zYJ4X0yNQX(<>rs5*Qr{E?Fb{9YsK6(;#4i_9o;wJMz*H~Yv#|`#RpuyC}>EFxMD@5 zr96_}Bq|tW(bi$tv?)DhbPr0es8`Z-58c}PrIt2EAIp+iETrJB7WHpzJV&}u#A>NI zfPel$jLlEl{6MXOw{J$3@pH8>OGRE)X>_m2Z`@l4{{{9`&L_WJmK@z*#S)vGtZT38 z^}O3AFDFtHr`fN{bQ34jWN2OO(Y{98lSs#M+4U0#*Qt(2Pbk=W(n3UL@tBXJ>F~zYlDaD~S4AA%E8QbExn*Kh{CjCE7=7_Zf zqs`eWPJ=p+HE_TjfD*%?HU*S`w1%AD1)5}?ygOTmmoxgf`TtUKL#lmX&d$zLb^@fF zhW%qrO6CJilfy*@qU)TAMg{C3`E{%xP0(E2z-cZlB@m~)bh>i*OVH*h$y<5A_`>d7 z>nAegG%z2~0I0REJdQ$h+MVM5LdGzfDUG3$A))M6XO*p-(m8cm^6c3&F57c9 z$dD6AyRiUlySwE*_U9CCro1F>Hl|=W|Kt*px%HM{q<}6C(cIsmCnz? zOP+Y#5C~D=eJ_CPI(CE486DV*IT`*>-Ydj15Z6oLDec^(+Pl$I8D+l5s36SM2LxiluuW_wh9by+ zD4lnf_ogGk=&Mlu_PnO~#Ik*L!Ih$|s?M6P?PSLjUJGnA4BY#=$;Y4|0uqvr59nCr zf(}%`$1xuJ`%V2}D^~h)f}u|s*jo_L1OcEsiPv(Fp~@Jnf}5L@p#oiZ<9Yv^Be{4s zotOIhRF5A&cH5mg`m#e%^S0u<93ul%3svl-pBD@zMR16>9?T)N0WVqZ&KUhabN~NCiSYkV`!Aa5{|Ds%m4IAnXv-d% zuCVgK|HYfm|C^sqEkQ#s8l~WE$#?w|V20#ZGu(e<8;z2ft+OtsGOB~aP7qW3@*i}C zjpCoxv$oe&xGpgIgA#JXJv6dE?6@)8*IcCgvijj_WbtSsGR@7s50DoSp?|gcLCq}A zclvJc&M0UnMaY;AaBa_^g!};(+cc28x-!e9h--&}F(t`&NqT}LZTZta)d(OK<%5A2@RV9!glcM_D`IKE;T@}3O0)Q$$L|!bO zOj^SkxVWN0*Hsyp_tWBr>nHb`yrW>c471`XC|cyglX{ck#hHNV^c!(yfbJtM)9VNm zcQ|6N>Sm1-{#59BVtk>lPcO*xa$)v5*R5(=MfwT=mxX-K*^v92U5VVLVtwBEU3ztx zx?k)6o)WniLq@POl6xiJ(u!_4t2ul!B#GDDpTuiDQ9$8{Tw#C0Z__?qX1O&}$O=G} z)j1{m=g&BuN_lUJl9G~jz;ge!+QGFybd&`O1h&h77p^rb)A`$p0X%qq(c_9q~x zD}@FO74zZ?;_y$T>{iqxwPPOMtQ!E(ESuk>xNQyxjOM5k&2uD|pOzC=ZK^7UPI+vPh0WJ_x&jbJbs8NIEb*P(e|cgzUmM3! z<#u#aIlK2h-_xxPM-am0wAAcU@e`;n^5EsGy~2HQ-*bFQN~{-3N=ixg-g{@0_X<`h z*7;#wRKt|r`w2@A-*J<$KSCvHaH8wWh09ZV&uE6j;-)AnPaol539Jy+!=u4@7 z<7_uo9S|Ljj|-LP|HRCR%HTK}9?!0pEJ9%hQ8@XM$PIfK5D)<9UJM^+?(pe*!shilk6Yk;cZ0v zd*aX0Cc0V_WY&qQ9o;e&$ZN znmKa9>*jD+_o$|Sc6WDwGnn;QGn6C9)r}XCiw8o-Kr?RpeAaOzo}+5ajaMd%P*X2@ zJRYOD>E^gE+2KQ|29M&xG$)-}^uO0T{yTH;e+N``t0A3z2vSXgm^>E+DJ?z20eZTG zDn-oFnPVFof|~j*s{d3<`Nys6vSN|coDPi|@f~&5uQDyM_81-R&Y9_piMXs(EAT4cw&bylm&|?l7*by~(9u!wsi^vaX{uA} zW}SHjbaKnzF+V_SU~ZVjgoyvGe}P_ABxp9c*9#c7l8|>jUl`mDCem60AG(5pdvE9F zK&m&=eWxnjDIo`q2o7G0{&!uG)YueaAHg~IrUA$b6`d0~m0oA#+DYfbe10$(iq&i- zJ7>cwp-Rr^P9?gwqs>CS_uRyeKxY&sUh~BwToq_(3O*-%_zfKXjGlg_bY?w4GwQy~ z3JP+>Pso665|DxCH|x9MufQS_3|i^i6?3P~hW90(vKz`1$V*V{YS{2SA11domzsVNlAU5Gd^J zXuj4D0A?~}>jRjdZAY_l-cQ=^OysCS|NQwA3e+UOL&2K;R6^1w;skGM{s&4ST_+4(TK6LPzQoseYTb7oUk(h1RFIJ{?(fDGw zalHlk9H^I71hkRqKV&~%v6Bm66iePLlSoTJhYSYQYhlgXmw@&kQ3%3zY`pYc2)I^>n)>$ z231tQ-^Y(kgrQMQhb8L(;P2t%`^ z$ji$grnXKs+KW0iAqA9^`HpJs=P`rHUjTsyrVnLlKybmVBb+2*T%f7I$Bh0}EvhYm zsLQMCn6$Kk=(-TE&OloX?{}AIrw5A}j&~>QlZ#F;W&WxOFOSJ*N4(vPu zjrS9vU55`ye7oyw%1)$kI>1#Ib}C7M#<>g;JX^x-$xQt$z$wfdc@<~R|5(jxrIl9N zw_Nq6&@a_aIfME?MB@6A=nEM~b-j<7`Mjw50)#9V`{!QN3>oWsDJIVzm0F4wyg)2r zyayD-Q~uq_s<#o9TW?fQWyz?tA0Mf#2)4m0-M(fUTLZSuw$-d|;QyT0{z12|AO(hH zr2Q4EMlvY1Cpt2DdN&_?rm*UtO=5g=yjy;k2>LY^e2{T2WcL8Fg+olhtXSMa|ESv& z7Ij{ewN*sRi+st&U4pK$Yf91;%uAYwo)r1IxMw1GYr!Pf>*2PT7J{w5Qw&)Mad%R&uCP zh5l^6Z@Hos^=S<-Mm;-|(j~}6s#uu0p2{#X7O|b62zj$$5gkfWzWwo;h=4gNqD(kd zC=R_jE)|bQ&VvRbTtnu{loTp|*4s01u}Zo*2;zu#A4l;8K)Hf=Y0joh+92Rc~YIY6uJ^t-i dFp$eTGz+81u{%&CuQ4 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 Spnx;4AUSCzsS-)UPyYu@Be=%^ literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/a-standmeshinfo.png b/doc/salome/gui/SMESH/images/a-standmeshinfo.png new file mode 100755 index 0000000000000000000000000000000000000000..6b35f0a99cc8bced1e0a06362601ef767b49bcef GIT binary patch literal 10614 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 B>u>-7 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/a-unionoftriangles.png b/doc/salome/gui/SMESH/images/a-unionoftriangles.png new file mode 100755 index 0000000000000000000000000000000000000000..d9ef53c11f61ea127e8a04052572e8c942e7a0ba GIT binary patch literal 15748 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 V-=E$CPgg@;NhwK|zBCN@e*jIPptb-2 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/a-viewgeneral.png b/doc/salome/gui/SMESH/images/a-viewgeneral.png new file mode 100755 index 0000000000000000000000000000000000000000..09b7c23915ad24256f45cd9188568199e48cbf74 GIT binary patch literal 47825 zcmZtt1yCH()&&X!!9tJ#f#3vphrtd?(Ptr!C`QBcON7`a0u@3CimX2 z{{L0ID!Pj9IW0$e@3q!m9sW&05)Fj_1qKENOg5|d9O+31wY*)+m2dq&1!3_^lHzw zHI-CVYhcyA&u8KCsf51>W6g3TTAkkwnNo9%%$thLJiYk-;ovxjcucn3b++7%d+kGL zwng0Co1%ojd_;za3lesObrcDx*u6h_j?2zw0zS`%(Q;{57Ozr&NYx9`hZ%M@^lzr* znz9bd`7>(uez#SD_j5}4Yge4LgXDErfY@7@)aQaX7EZA@pAy~|x7vk;o&nb?{^yzf zSO3U4r{wOl8hy8Y4p)cF_1_Zzx#7S22GyK%7kOy}3OsIp)6v z{P(fG+`r@{$XR|uR84qaWGX?nQZph`Sw~P`S+rO_6nezXyml7L*FFo*ZTq06CXbf9 zP}~aVw)9cVyyCwd>){nATR~o$FPOvoCX1^o6L-WM#Za5yuuxF5KrSsoZ*w!B#&wUv zNuP|RUa?MIr!#BcJwV#HW}v1LECW(j(z0_u`>gPP7i$qOOtQi;`y!(eDPe^{zL;Un zmN~8oQvZa4KoE@xQje5Si_|t6G+%IT(vF-=L$krVlaP$VL42MWKuWVfx8^YrAADZ+{z=v}F|fR*~GC|tc1|EqGq zHlA0jyx;nYsZA{jr${7Z#Ww%?M5_{@Gi(a}0YML#-_Et3w^mJ{R8ljkV!<(#sZckf zlv5M8I7TA+wjR1bZPXBI@-?jSk=DpaXFmNNkBQg-n2*1uw1YcVNXSRZx;&qx8DTB=k1HwiryUc?o!@$mc`s+0`04N{{QCBA$M5{fjFV@z>S{1f}yOkoScIr zvY~-<-kPh9aV<3?f%20R7D$^4iw}N2lxR)%X&(TxJVkrmTbjo=%e4$vQw2tg7P|1{eY_O4(n>ADgg&DD` ztGGI2Qb{g;b1lUS5$Q?)ZV(=WUh++*q;*iN=K6Fd<9N_@(6p&wf%f6~>D|dFlk-`Z zwPF%*<|c^8-z>;2*qrq5)NKg z55;S3uu*D*(aqxbz_k$-KRqRS${asKJPe^O6qpc^-y4U1hf9TxQ#=2i-v$AED21JHyb280^oVKiAl5wE5`Yu<3NB9jN=S>qV|yKl}&97L_r%i^5X>qVlRSL2$h5Wx3yF6(c>y)&u@LsoCe4|}}T{uk0k*4&(8_sOg z@Byvqsnp+3wVlsZtsMlel^gjHo8HNq9VH)9f>HJ}@6L?J8^AE0k03PPmp_gAvDp6& ztoBlNMWQ8hO3qDq*$R@%%2?Ei_?Z){2Y)<6M0!n|9BdZKaS#v?psySj;bue=$gUEi zg&Ak7p-PXCf(YB(-!F!Of>KIbjjY`?VJ==4cL4MvvjKLZ1fFE#zB6RSgR3KSd@QV! zeOC%&9fiA3tepVgNm>~vjPO27_1a`}a=~@=jY5*XRR#A3-nBlp6rp?~FuipV;Dh}K zCvin0;T7+t$`d|>I%SRYCBts)59{@#$Kk9{Xre{={T+wmRTsu<-+Wt6q1_-4c&7sO zhHnVtygU0&Q1+}!?YiZXPSslQ%AaQnU7Z)TEQDI^p3OMfxdk ziL_#*TjH9-Gl%`=>DS%v<0X^bVEyCU!LSP0W-DI;*}JrdhnMiE4nMNME0?<%r*#im zgL0ekECH3hq^F_d`g9ro)LRm9SG$zj%6l;2VqW1tAq;tv zi4N2|bJU>8sP4)qh!XNWBZGio1D8b_%RCalaOUTXVZSN6QT+;Qx=nZlDh1cfqNTze z<(eUD-W;vgSHL1)`h8x2>usRVTxODYINYPhS6IACX}B2BQkI?V^Xd-35-y*=siOVyJO z`P#EyeLH&`VZpkXfzOtQmK)HPvr|(3?YQ85Vyua6-sX*uu`XUkSFUU-*_}~sSbgdCw< z_e3LoQx0UVdu3}tH1X@prmrgYvnDFV&R$bl6?ZOgCNNQpcUh~_Ydcs45#p5S=lPBL zRX&)}Q*WK!$u$E1mA98)}|Bgfj zp5Fe*;VWreG}Rzq@~R8!*OGKypAr=9lmrl3710$wo+y`7Fk@^Dci)dS2%T)!zt{4i zNa?4Inpu$?kHXIgFKWuFtYqwbeYDZ{dh^#VY7@hezd`#u1Aa=oS|xmb z833gvzZd&a_OQm}m;N*$G5^S8p{13g)mHdZ3uB`<12k01%)c>QMWPXKa0^kJsz0~e z?tFSv7}-9b8FDW$xvi8KB9vFJc02Z7IgZ{94GD=~ZQV#0^li`Td1-T!TZzs&d_Q^0 z)rhC>JDtf`nnRYF@j_ zmhC02Y-kd4+lzgk!whstA^sC!aGGyjn&34RE2%zEFjua1Z-PE0^uS%P7Ta@Te8)Y8 zaW&_|&FVOhdhLX74`>-hxF4!G=1Dv6?AG*69qIQ-w{<|rI5h(3bSzHTHYEfUeD~P& zOZ|+it<`>sY_nKtwDbD7^Y*aHr|<2Bo-BdWG8AR++@<4`Hj)}^bat$Poy=Dr@9%K? zU#!jp+$8~-S_W{j)z)S)GX7e$6f2n{8)H`?-PpcJV=-v|aT(zZMZw{q#8R%6VP55p ze{of(dg-0x4$$4Fam11nAl=kw9|E8I+!i~RtNT}%)IR5dfe*y|rL6}->Sk(D4#T)X zBI!t?1%9C%O9AEWc3Vg#U}>d5PYK&@cQY}QdaTW{sUX*?&Btin|P>G zaf8JpFS^QunIeIC5Bmyv<6#q96}PH>tX}J<6uz9;5$!lGA+#MvcYdK+1Mwv)!ZGmI zM3Evt*eBsb-1G}BCuSM!(wJ?n7btVZ*knG6g;o=Yt!K-3_dF&slk;X=E;Io&H;1e7 zTA~|VuZu~@!cZ#hd$2L(hpALgAHRn0d@&=%u~7UtR}ZfDBXaxOAfS;a>;B)hh%9*Q zo@G1=MF=!hO5Yr_>gw26!4Bu{r1GLkGF0Lg5mL60jHIMbO(#MFN1zbsa#XA} z-Cu(}a30XDWco|9eJd^4;^IubB2xr(7PmLe4>}KM2|G*O7+u6U$AY}FSMOD-6A}-$ zuN@S#|Kl0R@cSf@1B0J|#KwKqG~uza7Ttlcv^X;8#C&2#Mq~>M3-j~y-}Lnr{QZS| z?#`$L$g_<4La{MPMm!i|YMfnmd>p%l_5&{F$N*=RsURgA9`_SGadC0HXbDurcQ`mW zM1tN)FHd*a_&E4+Cn*hUgyggT$G37uj#eX(9NK>L_$k+Dj_>a8yBy8anQBQSP%`3v zpiho~qODff!|wz1R|_m*X&esxB@s5hqh||D@ksWk`$>M+2TBULLeZ4cw4YE)PJaA= z=W{>#32i-b+1GyAW#?}O{spP}Mes(GrT*W(e*X{@V^^5&ZKgr3zZlYNNo-!f@<6K* zBJx#J6Aubd+P^ys>12$h0*QY$v|mts3y`fNMlMnNFDu`I6Dd@m<)(xEd0fB){)5zCvf%xWPdoB7(z3Z zFa5t$;l2vejnG9utF+CPC&j@Gb?A;rkL<4k{@Y==pl)f=H&ui@WyIW7>qI+R%6Ke> z|B-oQL9~}Sz7jPNM9NgNdRxF|EJ1R7ZDaS26vF?m-DU6zrLBH-8raAWLP20>$GVv+ zOns+$uU7S8nLb$tNcFGbM`ZPi8{f=-Px=`i?M1~$p+W{u%bDTesKNhl4-(9}`gmzzX&3yMH(B|L-iGG(VQyC{!q0t4_OZWpO)@z|55>T0CAK9=P(MO7!uv zX+pc*J26|h#uUDA=5h9kY4sz*XJ|&n2(5=tC zBdX4{Zw+rdYyA)yEA;pix*=!Ux}1SWnj}~{^rvc!`m(C&REl}PZJpfv3*UyI2UzjY zNXEFH1spco^ITtC7J*(5d#RA7o8zU}_4W0*g&_mI^R{y#u-zTR!yxe*u%KQ)Fb=eM zN%VhtWHTN97>YqU`G+YpQ@6zMDX+zjC<1Wp%B<&hqc+~`CXs08Y8RHm7wi9gD7o*@ zf8%jA#?qBle>HTGA>_xG>vxL}SP89Nl&Vk%-ER+(){Fo~$HuIZmr+bWwIeUH3Du$A za5IFJc2y?Tp5dvU;Y;Tid#=ia_a*dDO53YH_!I#HjS%*mkXxVks8F8K`+}D#=j6mz zC-3g>z>MbRnRvYXXZkG+_#9+4SBy}(AA0OyI2eV$?sMJ&v-{^y!GiVSdW%b;cjG50 zukEvCFH|n8(PXsU>?F3-<_GMhY3Tchv{QIh>b2oUOZ0X6JvF~R9P?`xImB+#8;Sf=Bc_OR~2Of@EYpEdl2n9Z{sf9H*T@Hun=v_p^2U2AVUg zr#};!_?(s>Q}x{O1DqvWa>KH z;0yWklqh8X{=3~LCMM>1vdk7k%s&X-3obvN&KK2cw8p7ptT&$^sH?B{Yud?l=p6Zp zNr4CS7w8Ma*k8~va2xgBjhDn@H%0c?@UrLzw7rIHszq&VzA(GB*X&d|cJG-t2p!`Xw1Rda0~4jX>wdb4wLD_{pw=m65#ELEXNb;`H zjyjggvfpY`UD#f*?iD54WulY!ybpZazCN6T4tFG(XlRY&wn#!kLY8yK!hVZIE(J)G zK%y|-i*$0QY0W`2#Y_Pw=XVeiDROhw@givF6ukLo0=%)C<8!t>$$v)4&%ai&vHQzZ z9i%Vr?ahZ69P|%0`kb|d9h6!E>{q3~IF(k%JYWF#RG zD%sJKBRiusV`^^3mtBeQ0T(Keb|0x#q;pzfrE8@pB`42x>iJZkZcX4C*x{pAJ+|Lu zcD>pv0Aa32j|R#YD$*Pw@VG2m;}hJF@eeGW-F|nFp+rR?>0BYd^;NJ@cE?R5cbn)1 zq3e7H8Fau=NdfD}ntyoyKo_x5|1jqB{Z6dF!*1f_?Wccuh+ipQNh+cLUZ>0Pu>=R{ z&+^nA8~1Vd!d$lZi|T&&v7=#$K5(IWw(gQ0e2$(Ta|dbjn0rfjoqUlgs*4YU zd?H3dCo){FF@mnJI5JU!g_3;YAaA@Y8E^cYAetKOefgYkGNgbvR#^=(1M-=AS}X0+F(}XMTr-CYEA`sK@tn{iVg; zx#Q5~MZj~|u*=zZp^Vq=K;A)RvM8&A7rLxrv{KU9%}@*jIQI!1+P|8b{^CgP)#2xC zWD4$a%Hq~zf?$Y-q3vZ>caf2k!$FhF^4Q>I-yP8LV2g~MgM+ZqrjO6(__Kq1*bz7K znTdj&D{37h5@!k;2|J!vlcXPEQ^`O0M=&=Hgo=ZtPnAkNq3^6k_dl+f-N3MzRD%VW zhiLT;WLcd%DHM#_p@h@ALe9LG!I*!S#GmkcZF|5Bm0Sys;%>Qb_Qu zK{7WSx?WOJ^?lz*ONc^&rf4YYc7Hgwf|kP27h%F;#oS5kSYS`vd1s`0g&8!^`aT|( zJfAuQ6w0PD+pgEdpPbkNDmR6_y<6LKSsrzPvQqwg_mwIftJ9eq#aXi1d~U{Ti*~3) zJaJxEe|Q~W)@n_V!o$Nq;o@HAzC91w{J%!EFAQxzoF->0hW|{sX(S3?F!b%I>#fk^ ze1n!!e8=7Hn}x&6?}@Xx7euS|Kj=Qs(PqbsRVMd;w=1@eFo+#(19qah zo1f0wW-PhztWgCXmkae{F9y@tOx8Q6yzJ0fx-QuR+Rh!?uV-bUZz-T|fO_p$x_)AhcH#ClO0<(pV-0$J zd8#+sLF_tBOUURoOEr*ib>&n`Ruj1B$DTAHXp;Q$eEQmTajl}5n4K+eYD#I{m~jX6 zBu&;HICf~C?86X@5|WFZG2FdbGPo=6yJ#^YT{g`$;O#t`&jMT*bH}-qZ8z~&Pi*Ih zk&@HXNBpgE-0-KT@`mf^dddy@y*LTl+p#w%R=^iS&M@n^YhzBKNYe# zHXOcFEJDh2sUk3(Qq}h#mMuK>NOj*vS4B_m51x%^w3)Ch*_Q&d&Dd z`aqGYB{eKBNVt$T=p~WcV%? zxb)3T(K&~HtevR5vUvpcXK|BCbq1AUIbI~h_rA4`+r3wIA{5$}mx&BP5~v6{m{(E< z2b+fkO+>Fv;-(cz?i$_3jSWA2d(MC2b~^qR6ztyAq!^Q8vdhlHgkEL)Y6=M4H2(n~ zpor`&=lQu{?%HQZ#8*U3)<8YQ?BRRm-9X?~nZ7Z}`}Z&W27Tx$K6X=o#{Y55Q=6DL zaPLoa7hu|lZV(uv zZ6K_>$m;-=0>^Q$9sq?Sv`TQWl?aT=@RJM)l)O*fDh65S?~inOKwWz-jyqtPUM%4z zBho3mFJm_>;e$d6g(FlUFZGlwK#kPyq9skjL(6b4vBE_dL-x$?e9W56p9J5v>5ieN z)W3GE`4#KHv$J^46{&pPMyG%=Gc!9NcdgX!jF?G{zO~X}bvJFSM%=0&@MdSnv0o!P z;UhS^z*Br;=4`2YY4F<-I`h7^j&&w$=3Sq$*c5D8vq`TYo!ZTG==xeRn?HAm$LDM* zT&E)vYvS)f_gw}9iiB@ys$-obDrO#4wQb7L##_HQF5s8?2Dp1ue0{I*QHoh?%PLzNX}<=mZMN zGUVae6yGW`7tcR4_+Oz2vU<&$g3mV|MaoojzyTZkzY$56yfZr=QN+(TO8HzZojR(T z7deu;o@zWTlkGj!?bK^lgx%Yhcx%txn|UfwzR`Zohmn52>)iz6z4}ShK)@uMGivl) ziR%CQY60WQN4!E&7mV#1e}JFlpPflD?;u8#d+D1^svVtTcI7N}Rv=oqShKrE71d=f z03-2X7gWm+nk!Z`d2N4)%3;m8iHwPZcjb!uKQ92d=YWyalF+l>#KIpBMiF?!dH43> zzwhBN#Cv-uQ*oiiZQ#sh%|z`2THDWlfU5J_ttBY{t*X9_fymDsPp@~7$HOx%Y&OB) zKCc+N;K~KdhqDog?u#dN;1wjOB3MgXH$q565tZ$0EcU*PA}unl;6KJ>$w>e{ePurO ztcaqNb`PrpxT0sPA2Uypb#1#Vj{BpSPxdsc2)wq{lI+ttwIdc8(@kb+g$h9T& zX3J;FvBP8Jc2k)QRP0#UDScoLv)K=(FV^`;_A{Zpnfut&zzKXYfDGF*8p<^zzFW? zzBKU9Z)!@JomFP{zBZI{cOO>9m7}Ie5cwd*1XObwEpK|1@JT{T?arG@^;>qzpQiFrDcc4i+cJR#fuN^{TR)X~tE_~0+* z{O%8@25S~otL3yO26G#<6^bXP-^)rUirFF+C~pv6&;->dh2x$+gi76((7vJQC=!kz z{(^}=qhsLne(jLy3Kle^frSKw|w3ZtudHSnqU4NV^P-Bm0}-(Z44@5=Z{%ln_}DNJ@GnMU;2Q%O zbma*7J>4&0R_basO>GiH%hwnuCc=Xs1X8?`s*46%!TE?s> z(ey{d4*Pu19I86d4%ez#D%7itm;V}lC56%?Be!9vWNzDgR`qJ_Q&(NTl_NV5myaj8 z1=@x28P4x&N8Vc|5lbr-CGr*!hc#v8Zw9(1)x~HBr#GFhB2sB=`8cAOZt*#ONi_f@ zeN$e*PXq;mH`8R*-;{KP3MddH-Rtb1@Qo86O=>i~{3Z$0UN1HHXmkz|HU=uL_8hE| znRJ@!J-3ZjlP{vl&&QhlccR)$s2gdhxCR^`w(r^NMi)yv+1a5Y5>)-I_g%q4H`6>^ zdBUX@Ya~}M6VCqzpiBNLQQTgNH_;u`k4`ikIHB`T#DPY%Joz<%WutaNV#3JyDCOId zLHzBWA-_`hvxz*z z+7fc<&c~(g{=~kOPjB7%CENMvdik?+x^OZW_XmZsFwGBtGFzbA%<(Dla#EX+9s`}U zvT%%prluyu$(?(83I3akil}__SU8?#CgR*JY!cV}{Fkr=-l|7dRIW2%Oic}6SYvUq z)now7knLs@acOMp*=pklD87HZIfjg)b-FrsTN7id1};>nBdJbif~xj=C9jSqYY(|y zuC6nKA4PY*@G(d1s?+(tJYZZOuf)oym{F=zn$)JzE^CA~DvOIrav2#J3GG2iJj7#j z0!n1J*Kbq1o!q_XJDMoaN-%(1tG4vf_ zll3LVN@@n05Ey94jgcdzw(4VrexCv5ckeHD8f=y(3v~lxwwjpu@c_oZHiz3p7UNc_ z7aSn&4A_>zp}$(~5-8(+3|Su9KG!?V5zMX<8!oG9t5;9$wjq2-bJ3nSfc3*)s3%MX zFBYg;Wd-cQLD}?o1r39Nw&O*Y+Y_x;kMqfyLdlk^D*nTzYEl@eH-u5IE~y-()9n82 zsme#3+~!{I|Kja^b0%(VT%hq#XZvm>g0U}9Y2jq!*M4TK89hT~REt8i$ZUaomfNk#U@fe1(_R+{w z%?*wU%~*5=JIOr;%h}&{I&)uks__*kLn)H>@Y(QATPlxpSxh85{i^V|y;y6r-Q0)N z5Il|-uex7?y)O1XpDJyc7b7)iQ`Gr&qJQ{cGGfDQcd3m&NT22@i73eK{bh`uMPMda zvGXEFXiN5NcImWk=%sPP3sPg`m#wRkxCb}PpCZ~rj>p;4k?Y$KRM9T%=z+^2Xlv7Y z66#%*kv#Id#GQMYL|brzsx<7w!HsvhO?g>W?dI3d5ex6&Fj)9mn%j75s?HPUuN~c3 zhY+-zT3bnQeFgOSk5xmm)- zC;fQ7Ju`%lg#U8IC@EE?=E`SER>Ps(@p+km#wEjA&2MF@nvA$j_7DQ$W8M2-ls+-E za9NB3hitF12vb`j7r<`2OUrzS zId-8EPBgKQ5YRii!r>z=t#FY>{e{k#AJo_wB)*ZToX|e%3|iy9T+kI|1lh4m#_TF3 z1^g%iGX9Rp*S61D#kX_Spl{%}1oA}_RRt281I{2LRiqkq1&XAzzguU!WEtPJi9O2s zIOZwY{FB%QV+p4)fX~8EEhIc9hMJvy)=I-#hCY#6{&$B;iKq7~%{8e&nuGsy{Ji_= z@c8)k95=wUa(Eerko&bUt>iUsG?*oK(Dpr4xlBmjtXS?6mHi`3K`o0zm@;&^UxLEp z{fkQqPzm5jprjZB#I|N|#6oAt(~U%M+dEi_b*BX=h(=L>O(SReN^>PzHB{Xf@#eI- z_WJWLGWZ;^P_Vr9^?`k3DtCk~<=wR3fOi6i8=maxUINQZ&*~%X-vozLPF_Knqtr|_ja{9T0(>3H{k}rvu*6o%%VlHYPHV=*b!`R-|mSDz22L2`)@p$EJSb-jSK#01!M&2g(hkw z$odZ`w7Q>+Y@4*Wo-U<-Ung%mT^AJ*A)*1Ne_K?|ul+R5EQn7zva`1zPa#=nJb*G7 zLp)ZlR)GhV;-MB#kM@ z^?)(^Lre?dC_wVrlH?TRf_$D;=)X+5Ofrwr$b({Lf)0XO zY3Fy+8LQg*R==4cx8w*}?f6QZsh?|2|B{`I$Bef%aDmr@{55D^JCJ*~9N(3#!f0{J zQ4gE;uxvV-gOC2qj>AJZw9ZD9h^zEv8om%a+aQ=xL zn^#w!0R0L26p+!jqm{0u-;HOlyAnSn7xjKm3cpt9*{g9~pJI=^c5G;1{H6MAc&oRQ zXG@y2_jSfMO6`^*rQ(h;FQC=K$FDJ-CM)&SVg-nl5U{#?9XRwg1)_oecaO-R<`5P} zP3@L;naoz|nA8nI}<2{-!BZH``nGQj`_VD5+tUC&M?ek^MA6 zutq|85HKP-apR~(N^PI~aJ|L8zG~&Q@VJed*z%r5lBsMT(F-&Q?^VMJbk{5>yP?akXQ%;b% zbfYZDo59Ww$V@MMpeYkFF_Nr$8}^B=C6Kn>1KZD9#bKM#qpIQgLnc;e86ZAkF4XKf z;$x_;huRV3=O*q+0~Ca_Jf9%A(aJsj?%~(9M_N7y9}SpR#2=ZYclY*YKswyHr+>QB zJbru?4U0?3=w0%0(X26qJzZ@q40wB;%+&TcTbJIS%!ay3sCipn>AzQZD$!Hf)`bAF z89bkZttq8@ZUUIZ5nDI(iMj8L=orJ z@01wHuw!9%4*^`&rnld1-U%Gth_QMTp&zTErNE(tkYw7LEv|?8{af++)0JbFUO;@h zbrVX5Xuo8b?i{$S?>maBa?TK;NI}0m&P}PwYQ!jb&y_XV^xp-84`WacM8-~@FgiLa z;o@d0MoADInvj5%>-{nUDlhLRYb_t$Aa!p^zLf!dJ!`IzTp?a8C>qad%Pz7xK|kI| z?3yRV?!6AIFmL&jxe9!WY67qc!WdqtoUMt1N?PEPNwz{!0YHyU1d*+6GmkL0Tb0+* zHHQooRsS!SMDT=Iu@MpO9xW6UWu>$jG7>7be{rqc+|2c|C!j0%A^DgIp_}kuXxCkK{YkC6G+=q zOXX5^*Q?Ck86+Sy>Yc)ib-bhaDF@>@is6f{h_$$K*7E)mg*0V3$P>jnU2wx>OCVq?*QF=&0wb54b4ZWLDBvVu3GzvM_Wb1>Hloh{w zm{3n9es`#WNMF)S%i{N(G99m;sBv0M4hlt6J=OI&e-d7O{CbDi0jCkvZjK}n12q+z zPTUe-6Z4{|c_Fm4wAe1!1j#-cd>6^zg6i+j&sS5fr;9ip`ifBRwA8(xpm4r&!JJJ^ z1_gTS*#8*u*%e&q8c} zkO$$O&@^|dNaXI&j?*8~^faI__|sXFq*gR8t**&#QQe~ti8+v?&Fc`hZo+B`8jA4( z6cH=bt9z-})@|XRs2=z?CcCZc>#VwZ&+%NVc5kH#CAaPI0uTiNl8srLX?_e`-mg2<)zi_On~(h4VqPRMjsQ8nP!jZNsqFPhMI&w zlf*_u6|_S=?-9;j@xEFqyh@%~#K#!Z0E(O%G5ikdsQ6Uf!LmyVA|Yoi6&()c8)> zDix(L=^%DPy#}67r{Eb&P9k3CA5a&mh3cV*izYGr5p;2qgS@=NHFqhEf0yI4IwJyE z9x{NhW&{`Er?dif(bmBzDt2hZ%BFIUWXraB7?C0+0^tMXJ{{>Gqc(fUCBw0LwS)1l zp7`SOt)`uN9lH-dsl`G0UHn*bX%ah4tj5>2PX*W@)EI{EixvktbQjOvqJlpSQ zcEQ$tp}rgyQR=I!j6^;jWM-kRsur@W1oHg@i2ha&2In0^(9&7Y(mC7K9(}&jM}d6KX|NH zXt3dAY$dNOOpm##@ORSrWWjuC)jdtk97^2t|s}& z2W4Gb*Dy72HjFIL4_(^5ltco&+i_4wjhH@cDU89;GSp-E+w;1?4oAm?J4IHtuBxc3 zn{Sd5?5tzAibU2zn_8w?<^vSs3)b1o}y;$MKYOMMg zoo%~LnrPW8VZIq)tKAm)tE!f0e8gf_?QIA{b}??boU6_K%xqx=qFHf+dIrq+9w9i7 zhn6JsAhfsX*oXG3q$Dv>g%l^9--8*v;mx28N`Zb5kmEh-FVbYUmeLc9gpG|YYGy_? zC3u&mxbm5B!buwm<5+a^m7+oVsCy>yBTk~2R{DEAPsR=;R2nw@36Drz=i{gg+p$Jc z6WYyK?Q9uWF;q-UOlW}(f#y;a%j-O21A_16u}}fxUx?i!-WmQwltLNiw2*{OJ6lx@ zDvvvZEC!h~3?-{8q(5R6tFx8+@i$rV=i8f@*N|nQ<4E$lpU@ua&Av2cQc8cyW)>-2 zaJ=Etn4@k)Yb@5Lq>LfqA1%kJpk-z*zU=mIjj03LUwzxAQ?JsMj?EDy&=a(rchC%v zLZ@KoBYGdMp!do5zA|HC46FGjUb*w(OTt%^il0&8TajQBwoFRI=oH@c>Mu}-WH!(?fgVb zctDd1pkSb6SmSmZm=CdVNN0C)LCN-vo(KBTnBI?=hpRsvcHW4x`jfElZa)PopYT@V zIx;U?2h9f81O@P(Ld#zVsuRA=fgi9*#|-yIlfSI(FNI7kYoIxv`0QtU9As>89eA}D z?cJV1_&J?}r7$#~Rd?F%1?@hlyNe2FPQuRcx}Rph~J< z>v*cGof}O>t{zgS8!0kduwbb~zka^!esDTl6q$(@GX?eY*qM&K!w~3(Zqt@+B|9t< z89NOdo_&<&6FFlGOM`R8jWNCVv;}>Q2X_1`UXG-QqG+HUxnB(mhMQ~*Sko0cs5oZH zsQ6i@YGEbF?k*JPTnH9QWoim5IoIeULO=TFQ}5lL6wI0QBEUC!+7o{fnw&_s52AWid?HEz1M-4$ozd5ut==(oj)g!CWh z`pQ5p5i|-}dC($B8MoZteeDjk^q0kC;5QMDP4hD*mWG*m(uSml;dWg0!)+LYRA6+@ zyH7tP={$YZ;R>r7u?Ro+)giE*=z|K}=zZUSJZ^BI1~$I~SV|9gy9Y}g=<)fc|0o$G z?qlNgi}eRS$)5`mFG|GN$e~)iM1%CNVf=~JCCi0{U7|4r(V-cV?Sk3oha36X*hjz} z8L!{tozYMV@uXxuu00zcF*6LKM5zwkm?mP;5E(D_tG<~cu_L2bQS3A~gJ2$+R!3cy znQUwyvBO&7?3e~)3Dj00pEJaQ*dpK9gNb?LCaO;Roa<6VqY3BV9Jn*|w)fcp?iO}< zDG%>}YQ~WIQkZ!=HH+zenajrmGdm4kVs(Stq%5Xw#*d_gk|Qe#=4&{#o#dd--CNS> zT&7Gg=jz$dE$>$Ru~gk9D(BAUS$}=`49;-rL~6{>pO=Qi?S`>gg!+BXUt&oY{d+S` zrTar0$qN$4FA}{N*DfiFif~T!Qx&1+5j-w?R*C|o{H1bUuU~Pqb%`fqD^myYg%FY{ zn!j=`DeWk8VNN?g$j0A{$!0FfmaT8=OlPXa27b6mtJ6Pt@vk%(VIK{X^dC-rQ`MET zmJ#stz9VA>OjbOHj;WrmBu)KdDCXq9WTvAmv2|$WcRLYlYdXdAS;31T66%fEtKez2 zCar6YC_w&z6QR&gMeS_3$3iJ?|4ZJQo z@SN}RcI^2gTzfH~n!NBcDiQRrG1b~))=;R;DV`E*HWVU?|)#{pHl*^+FB zW;y#^0Q#|Vs(?m-OAxnUjIYZ6o+btzY|LrS5ng4^3V4NuEjBlK+f|)dN#5@VNjCjo zRV;%&2?KKv&8sFnubs_X8a)U|NAZ%1&p6@q>tZjL#9}Iw(Yv?bq$#JA9y3lRJ?tdS z0i0L+6ExK1HTx4t%H|K3d&6~dzPbX29x$8U$4pRg))*f}CWuqHhMgAdT03laM6{t? zft1A}*n_3&4J}P;-D(edfepUEf7|~y=8{ZEN_t)&wF8gvxnw0a2Fhc8-Fvn{f)-hp zI~{(v{H7xyh|*Q$Rz1CUlT6(8eoV#v{8`dTnr(n;z~6!LJqE^pY(RVPNMiNQR*)zW zpYO-Q{FKgj-f@dUXdU{o3)W_9Da7q>hi!P3MF(y(ltq+rEA^iXC1RZUK6aT=D`u?Q z;!pUItDkpjQI<5BUx0z%Dips^QH3)f>K&}NaL5!TjCg5WK|EyH=7lA|F{Z9lc{X=d zTPCM_q1?tH^p{o2rCD`;3-VCNf{FiC{hX2A+uZSS-fA+7?)P{)hpMWoaH=EulPg(~ zJj%$(2-JM}MOwLgCLF6G8tPvSF8FPHSy683aqzKlC~DBUzIFdW=40+hMc?mFnz-xo zRdK65y+{=dj>s>TDldDlZ&d)^F@FQYH`leo8!QFe8>}FkUV+&*gL8?!6yLTV7fVsq zQy6xCnYmpx-{Glr99v}tud-4Z{?}IFj!!nb(4YqC14em847`LgLx}wo@9$P};lc+< zrZ3AH3!nw|yu^vbrW^i{G>btn|4ZI=p!kQ+u&hSE;i=`agrN?QVTz3XNT@R>FZR7D zJ1sr4^~|)FiYfnDVAr?Z)*RrHd~=NYd(e6llC!^6qqefLvXr#6(fv;&l7F<#@rtQO z5dAM$q|_eHM!`EUxWE6Y;~DUOUH~!s7B_-qoaBRRKCqh%zuQ?qB;bL9ii%21QnGOA z_+`{y6Rb4_>|Spnz36K#mfVm;CEPaG$a7PnPyY3*I4&XM`-FMnqG_ypxtjI9yk5`n zyR?^Eoln_x#uFJ_*VX(`T-5Y+>_TF}3MYjBdLm^fj;iEA0mE`qpkVG$6Z+;A4HPA* zB^yR_PirlsBZBlS~DRx{we>HikdvMvU6ju zLSVZ>SIH^fCCW`8W8tj1bGWqDZ$!taf4hcnRKT%IP{SK4dC^tSi&p>Z_jj`NTVSw_ zdrLK#i*pQu;{-Wh-q$-HpiT|E{fzUu*89dEIQ2jnL)Hs+*n4A`9g23|w-a3KRB3P@U#j3XUxyC62c zC40A%OrV1hVqs8S`D5m4Mg~cZcgc!b*PS2Q9sjMDicjqb2uK|Wv~i;&m!^DR`T(D; z;9Pa{<9p!jJE*6cPrK22uSsvv$2)L~=r5tAPZxK@F#Ctk%mR{&$iCZU)f?VVOw~`5 z2ss7AeA$!uUZeou(xDx8cJ^kg*0&N+(EZN5tq4!7>FuQHU3D8<`Ts-HS3pJae(x{c z-CfeHbccYFf^?^}fOL1K(t;o$-Q6q=f^^r?-5pE(htL1_J%@9aotd4Px9|Hr&%HP1 zW_Ws@Q4h&-G!x}-)BLBgZW*+R;v+4@x86`A?%%~;Aa_xviS=D#pe%6%+K03*Y>zj6 zE$X3Z5BQ-%j0_C4h`(fZADw?kBd;95fW2X@^1|-N{f6g$iFY-;G*9B80&8*S{=34J z4uug9^OE2D0_35WI4M}Xfdb_id6gB~<+GnM-kb$B^1%7WpV@!(`9+o^72`BQH+}gb z-Z0jAoMP9QY2dwzmsB}jk{9eRqPBgs9rq)J0S9Y88|ENuI)|t2c;lrP{e2V!$$TW9 z{21!1Ocgnrq&p#heAG|@FbB0?rSG|SxqA`z+AFJ{}BXl67GY) z#H*QY)+-)+(ve{pWg` z68-Fh4oHVikep$ft{e0Y(L9>#{%Bg0QcxkwA2CKPn4%Uvu1nuA^1B?^q06gOSxw(O zr2PwAm{A9O;l4yK96md1tUAy5@0J))c#VcuILGEy2FM;)xRJ!b9ph<@TC@tf6sxm< zTSOM>zx0uY#a%sKl{&|QSF2fb4#er@UHrZLmy^@ zeoe_{^uZ6_w9Lk`@?{XTiE!=stl6VqzW=ljW0TzCM}2u#DUmnZk~G7^feo@rMoetx zTe}Fy+HY#^eX_0#ohIx5_y;vDx{N>$C|b!GNlu0 zfI#kGhdSI~4ceHeYWwTj-RJAyXOusfr1i7*qeZ--9WOuMhCzj&rD(=G#8+Ds3v_u% z*%>~Uzl2X@({Y3~usSRS?&XC`uG7p-nC6rzkxmR;9&N|%@-B$Uty=Nun(I_#z&U3^ z$wn=6jufbGD^q}daCV{<(^W@(eL;~XL- z3rH5ND=(|cLMt;lG`}!l$Ri@Uu`1qi&>=^x zHDSoEeREZZ@BQs;>C%+PAA^Z#*}FE#0nH7{{Y(7=9vipD?M4~7c$I3Vu%)E6rM09* zc)t_snI%$OA><0V&HOyvIO=(r^s&Lv+A5M)Om8-5_Q~tUPQtGP;R)JEZP_Qc@sP^! zuX8U?+T0ooeTFlLl#I-TFXMYE(w4(FihtH5e{0A{709r~;%GcQ4g9V${oY-SX^TuA z0A1ZAMA zYw$Oi%r1(tn;-dD@QJk*e>~IweX%q69!+jZ>K31UW%~A8Lg~mCGdgSndQ?BR6{{bH zda!K4>OKdug;*t)SdKiXJ(H&|*S?_6OhIS-9ysz?jJ1D+1_mo}{fMB0TRbmq6Cw+0J2OksqpuoD^iVsGA}P+|(d z|J3bQF-Xj#&pk|jep~s1pA^>NN1gTuTX1E6=CpbxMjWEHK=e`0q;Z0gd3{5oX4>(X zW@b`(JlFdumFWP-z+0`;%!Q3IOD(ce=IHT?FS{MjCf5xX&BMEYIrBr>Ai8&i+5%%} zv}0(;ZeLz%_jq?S%qxc9JLz!$NPy3n*=dAmHzyyAJ?W?9*86Icw5`{0s?=KCf7E$u znJb^Y`FtTg!rRt05x}nr4y2DxHJ&?wRn%UFb13tJs|2s(Rw)p2svZYxCM{;oU_dMD zkC!G>LTdxU-Bpp`Pes)9vg9be-xx1J>@ZfiNCy1cWg5$0^?;iyg&|&i#BDc-v&-{n zAmhEvqS7b9QP}W2N%D=|e}qkFn#>G|Iw^)&nYE+jWt3_5qe10{6_R={3VYV}9A4ABwk*m%-coJ1B)CU1dkE|9R$!bnHYbWLa)4P$uCE1dpIiQSm^l7gAE)7h^uMYp3eV-Xg14-D<|$a^46F z;vntNsOMAw1K<1ST%=Te%TK(&mz)K>YM4P>-ZystvP8)UqY`P{vX`W4sX={ zTre?T~!Bk2~-@PoL=4i?6hvn59Ft)BZp8oyNWyz{+I{eL( zGz{Wp)(#_Y|AwHfy}u1r0=toL6qcA~{#?u9$1!AafWl1-snj>Ap_a1B`>nof69UKi z0VM3_qRIeoX0_Ld4Vz&d@g|Y$zzJ_CF}O$=pyg;&1CpaO&jRR$NHKJ=xICh$n2+X7 zui^Ksyr~+(z`p!(|DaNJ8k6~Cz(2IcdJ_{9V#9q$?a)H^J{lJ?bxI?cB)P>)6zbnC ziQVw5hZZxYw$p)P6skZYQvF)-mDoSh$_6QAn(KU_$ovc6&2O0in&Ft>vNR5X0 z51@6FpJE)Z+8!;V@RkRmLW9$k83=LG-J?7#T!p{uh+P+8W}P}eYfUuX56M-Qg2@u zB!1sYZA0dT>@t_7&w8FfqySOFgo}PHvn`@`qQ?V3M=;F4(Sbf4SgeCnyvoZuj>;q+25)D?R`Uy ztia%-O&ZpR8(XgTjmvFA8*E{9?DZM9;zSf!bDWoy@ly%lu)UnG&=*RNEoLUgAa>kI zi}5rV6i%YVO}(tr3ef%bFix*;II|tin#=x2iTuX5i&8PZ7l`17t4!A0rfWpM9nG)B z+LKc^9RhDp(Ny=i1Br^*ZIMbXmzqT%mHe0yfZ|7P)R;PwGv1Vi*NB|lyqmK?ypFv# z14D9$Q@VaHOaGfCL1!*1w^dan3jOd?Xb38f z8u5+Vs{_g1OS<8{jQ(VXv`xG1@3fVj6m)*@mZTIe=pQ|q4kq?DO&TuvJje|*5P})J zDNs!mk<+iNWRD@FD;xz*ceDtaF(^8y-{c(Otf=fB+coQ5J=u08D)D*(Wga(bX{fDj zuhp%_?Sds#nhtoik9V>56TN4lIz@F_QBHQc;qdtbk-}=K%mlRLjL5VZBL&u0=@hAI zT|-Arm5HX6^+@@UKNjPk9sc<{{7r&q1qqN>Sg#7?wcMCk`_#wd?-xa;+7uU^cDD6p54+I^=qfO7E%KL2g$ASWoEXDS?>(oDg4z^!vr18}i znl$_{3ruR&W?rrFmls>$e5rwMo$*o!PS3JfW#K1icxN1@QIL+IHMHFYiq5tQ{eBBL zSmixQsa1*@2f6Mx{Bjf^uUa~;5a277Ndx5e82;@ZLBt=wUvG3FyE@F}FxRnk1R#K{KTjsqbE5?e3Bj3LUtQIde5K;o1H#Zqb)xd$o2wHPWb9e;>j^FZ}M{WhgH zYfQ_BS?gxQ`;V>eBcAZI+AuFzMD@J9pi?16^UpehGR5A+0lA!<40$`nq+pB17Fw-| z(>ipMm%5m^sMD1QG3z3u{RD8OeaB?Iu17%Y1YxKN$LJu9tr_8$k<5IZCV8`gD>te! z4wdiM<4&@e!H5_^eKvuAt%ClVOYQy{-MEoxDb5!y>#E9|BeKS_{q0wEqZcf0gYw{AHtNBf#$CruNhE=~zlDH6O8>ISt{Y zZ@%jh&DZtTXH%iRJ0GiSMs3FSw3vgREHeWJh05F=g*9pt2S%<+1kx25kXy zOeN{ENo8{ zyqnlo5F1&2pGnf0K?Q8-);zmXW`)eUHGWp|@JM{Dg6%@7osudIK>~GumeB6OZ?_72LLykf!prg^*;{jwUjN&+`mF9br9wm z+*&F4GS1A|4kJ+tC43F<~$$rl3S97dg7I3 zYBZ%+2_avHtW6rWb@d>YHtwdxMauKpf_}5Hz)&;Od`x7wZucA(PP=CK6|I4Kcx+;V zX{R1$d*ffGq2U?j!wX;PyIkGZbnw}VU$W?eWHf_ot6dp*6+ykw4pOD#!b?(25WrT* z?JT8(u-3uO6duM`ZC?edo@r&rE@|~$8^G#!A5!!45OkM1lBr&##S$UvS>VHNo>6E$beNq_Z>HhMw$K7Ev19y!DJT+&nyyPFt!|;@so14ghd$L zSStCJUE7|I=8uetER7KjOroJ8;@c~u+P3ZeLkl(#4R{V=Dhsf1_it6?%Gfmz$@Yv%2_7xYi%@>DmcgSHmIhi1$e&N&p zvK)qdyUU6FSVVmv>KsXF$Dv}8ef4*iTS0j>R4!c#cLqb>SQT=PQWld5W*!0tIQ8CiH#)VG-q*yp7z3g^t3 z>u&{+O%C-2weUYfezgy2eC#WEV#}9k{o&%oHqumA^XLui`AzE9Vj@`T>KBGnzzk7S z*TGcDB*t|A#11RaK{A%^NKM8SLiM)eT}{8HVfNgGwo>l+JESJXo-*pn|fO zt{2R$P_fRqin_lXtf^<-J;0O8hR+FT=~U7W(6~C56xdU+HW)i#G%T@Ye0~=3F*Y^f7 zLsC-608^Teq!mBbEnUD7jN*ltjCYb*q$9zEGvsBazQ~FbtsT#b7wx2+@q?j)jN2=u z>UWo)ZCyP0YI{5Dmgrb-n+RygSU($Ni8Ep`k5?>9OtJx4AX{1XGz9|IrKCO>=<) zF$S7;M|yLi*z2wSURvZ~Nl^@<4Z}kU-?6DU^%x0~-%(}KE0o?~sJlz)I6&+`qd7Vs zIf;Z373hf+>KpW0eW(AVHW=x67Hf0tdve*^v@{v0KoP!S+-i*VP$n*W7@pN>X=;{u zrRgawvEJu~&eqY(DEV3yzYD7qNu>Jhha*3BKRMe_XS(xmtt-zx8&Y!2@a9c!Ss8vl z_NZVy@f^_8G!02>zA1WfljL6pCHf~Zqgq(xrzIs69VAx801!b^O7ZP_q1s$ei6J=n zd-%Z_2=p54**e`Zke3+!XRG^X#DcZ0^Tb@oWZb>+w;+7{uQJY4s+KTPx3c=9v*hH$ zUTk}AbvskK+ZG`$Pf{9{=%Y-%h4eHZV?Lv$VCX|V`zzsmKNCot2a}{`bkoX zeB8TVo}n$rOG7DyxOl?Dhidd?B5Lw)?n81At7Z#hhb<6*nz3(PJUffi~@R0@#jKXZf@0v ztnii`dUrLo&yE)%mS=oqy2>AwCXyX|e7Fy6#=5M2;4{M?tE#C5)rMM1o5@Lwm1`Kf zOU?Mvlxs0groQRrv_<$ErUqdy&Jx9CRLKnKSqIILi%<#Bg~$32OG(=YAIgf*R*6{L zhgU&#hh<9};`^`k8n-$PZQX6bInVCXYjRwb>s@`Dv_~GwZHVM!iek4zZ@s>or%D%%GmEcrU-YP zQb!E{#l{=GIo@JcgC3M1DTKs;zNw- zk#h}jly|vbFK+^(r+G`Hp|j(_OJbvr^JY>f19# zX%gy<^A_8d3Q1$bOIn3j%=FF#soBvqC%0ZJO|ZkdNd(uOqFD^j1`v9sNpO2d^P=Q>-IEeA_|z-mTmHTL zxLpRYLRx>{DuiHckoHwtXrMGG zCg$fO1_uW0|EENM3VDz#xR{<{+4pCBNh<8;=&EVO_i5yILn1>|H7SFbz z(|6t2LJ!6N`uU$P#)ATc{pW<&+Gen0PGubYWemfFvu`)OWsMtj$d0-wxsxU=&RWKP9tUmmr`QodqzNB^~xo z6d{Z-yaRdoAQ6ES-O~eBI!En=xxXwE&v+s(4Sebx!T`l8#nLnqRd8k_9L&XOSUL_& zwSyx2n>P0iLGaweDZzcfL6KPm{V?%YG6ThrPi!t??&YjyOvL?h9i23T^p)^%Sr9W9 z3b7bYS-&UB(pv5qsFTy`2%HXHFeePB_sl|a;Obm!!{nk_n4c~JW`RZHMU+NomZWE^ zze{hL8+bof*bB0Ln-Hva{#5A>$jm+bd!V3z1+0;qc>s1EpM-tC7az-$@sBb{5P*Ud zRT&H{7HS^fFo2VS*oQ;Mj1*Ea!tiDjK%83Z< zQ9N!{PGLcmo<}&K&fZoA+TAH~NAhrPGmVHj>W6ujx^BUiO)QRT*MZtDf^Q{9;C1F3 z5WM;gg#%Dk3SKZG=0u_?yTE@axo#gFhlYn72Ywh1N>(JikXgdA_LN$N+>)C}dIY z^Dc^+i-mlTrK{de7B#%3SP;MsSCkS`+ABk%Mm34H0wTTd26@W-!=~`eD$H40NUpv+`#u zYf>}{C#nWC?x(*mfa%`$kT}rNnstZF&`wg!+p@B>aBTh(&LjZ0lRf=4gk z#AR2+N=AIp5rhpzgHgt=ki9wpS_y#SB~oqybiQg+V{U{U-wo!K+lhC@BSdQ;CFK7< zqDT66JaO@fk?kZ9s7f6B!_egLZKS5SccKC-)9aQcT#*KQXixmcH}cewny~1S3v-9N zj5nfXHX*i1(rh4=byCb-f(bulj~h^ZHf&78d+!kVG9OQRa!e$FxZn|+;69dR^IFJQ zcbQ=AD}sfY*8|3qyx>ln=5I2joPYA7d1W!q!H1N%dXoEK+E5dUM-TmsJm-GqoM7;%k|aVDw*M_lfomlik}Qh(L{zy2=n=jo*r!0 z>a8gcb;xF3Ml~?&T|K71scSydE#pY0!D=_yksOd6oG+GEnk?5i5r;edyqxNE0?@C|Mwnl_HWwDAZ~ufoh6 zCm3)ih&&Y6Zy>_U-Vcq6LcP8h%KrFA^oXGl`gfY?8+Vx`;d6y)HLij_XtjJ{g^& zqO8HZCv88;02r;OhnpV2B2#Z(QmVS={z{Zw^caLhjfr+iYnO0-Xt7e^yn+ z0fOajL|vn6dWSKI81Eihioml%ISDF+jf8^(u?9*;wHA9yG@4+8?!NkrzH5u7p8kEf z2@8;1uGg+br9{duM$)IVn3`K@)~%%DvH0CURr zgCCZo&nBsNtuMKq>Yk_PUmNBhHMuR3iZS>mJ$`8)YofvqjrF|<)2z;O6}Q%_%`)3L zOm)b*{5f_~A4&}U)8O`b$nu!Xw%Y11Er43P)>GOSH@pJ=qH!yt^T9N((jZW&p;2g| z|7~5`YC;Q*0I9EfB8KR(nw}P#EfOmxr4TYGH=(S&bY^8#exQwCIPk7w4*YYGlo&ni zH%4$nzu*a{FTf^D&&&!-<-wFo>y;K^4t-r$wR z9DY^kJii^{dbW106=_1#5bf4L{lA{cF-B<2^V{qD{_@AdX zk6E2F+j4hE`7yw)3YI4`WADPVGuKj-g9|<<*W#t=)laM%JOn2 z6phe2;6WRJZ1^259i2scTE|6v!~5V}PkciB-0diZai6qnnlJw{1F>qw)VK4*f8q)w z)q#ZzCUN_&JG$Y36*^ZtPNEx5SGO%%0-$na6nqgsH>r7mau7zSh>FSyvM%_(;)hvL zX5Rl^&AI)x%j;033yZNe&?GJL_^)zUmq7Rn1SuK-oq- zj|_Y%8^sCUua~UdLU?y&G9Z&h7N;$jO}>Ht{=#l9QDH;@fLFIU|dZ*z@|8P zQWv1O`EKPc@H=?kUuu|n01UQH4ZK5{7o0*0o9eH*wVz#5-Z~l$8lZuAwij&7+8SGB zE?{gz`L0fohE)oyEM0R38l0kAy~~zrTRu7Yay_Cf3R3nSQu>F6)2KZy?Xhd=g6PKE zz1>|-AuBzVBv_-^h7H?+vT}6)GO1Ivi^hJy;aQje znLHj)aRwq08HasYfi7g!e&#D51N zCjGSJ_95s%7-<}>1J66aEQurcetjaFu6>(xi2dg52B#_be(kSXW{VbR# z8#sV(5AV#>uVsid>#dxfJLhJLzI`&*7BB&je!f?DD_o?P7S@mm*F`Kr5`6N;z1y3JW-TruTc-i30mKg@isIdPiH){RD z4*1$J=#9+>i#9zk$I_(R8R^R95aXg>bDy$OO~p48L-m*hTeJ#G3MBFQbD}N8o>R;VO*A?xN=m~ux#Xd$&+5e{ zb+M+=%_G326>zA4%pQt#T49x7KKxX#MW% zkYo6-Z1S>YeSa!MOk66hlg%J1hH^W;f$P4BCPMT$s-wO)?Vglog!0`=uve^G+t=S! zlDJU=s0r=4`DS+0DQ#?Qu&IbDZC7LcmyiJ~K(aXav7mnG7}$RK?OG$iOWHLqS-4Iw zFQeyms~eRdn|K5?rdHz5AvqqwztQj66OsxM|Je;!uqsXg&@2mHaOi&C+^j6D*hFOE zz=Rd_4pmA+NWAolo(*KW2eRBUUT0g2$vntWY!?edqa%6)cy=gfRutscNI6qFRXcS{ zg`M?^d6_td$>slPPhh)wE5B>n6gu~1L69Z#j66lcvX)2*O4Gj3mt+YtCNFubee8vFnQ&B{}4&}=;str{RboP6~q zIeQ)Z6GkbqS^f-&2rCC2Xa9Tzq#3Y1Q2NcmHcoSBjG+gGM_t4z8^S@xq#$IPlVl)k zo<@QHTi~IO$dzXGQ6p#4W9zqVR9d?2)vz(0?`QzaeJHezm9>jQM#hR&?bz{mEXCL9 zG|9W#c~^PHb>!r8M~JPi>{}KVR*{RCh?p}Q#`$#^0yN(_R|8)PSweKm9EKw;yF9UPT!atbu=rs_JDC`zU)}|7uwg#~ z+t&BM-a^O_dGqtqCJViOCEa_ETvic@hV)$x*Hg52$jG$3_VPdHTuj?azr)3hGFQU- z=&6;*n|%E3*C^YpSNv7(u_4-Oc zj|zG_XVE=zgx!N^YTr#%^OeLUx}dQX?wnhniJg@o^&0&be2ah6yp@u0j7dCw*gs96 zD<{w-ef;?{(WuaV^3KjM_p1?N5(X&qwj}YKar=v5vKB54>;~Sj=_ce4q++m`-aWF1NLP}g$S6AOCSdIF> zy4keoKuClhL+%7)rs$eRd+evH)Pe#HgPiGUXbA z?9UU91OnV)VC9G9RdqE{gS&p~Vt*q?sz{dx^etA7JRoebg##C-nf@=2P;A93JDI-rvb ziNbYAObVjM7 zyO98^x=9@f^|J)BSNRS1m10f&JJFKO6aw(-*bq9=lpXaky|e6ZI^P5d2qU6Pq1)(9PXQ!<`&V16V?y*%{N0>Thd^%mCv<8r zM=fLv3=&k#1&NA#D32oc{&uN1F{e8;A{j~o;@Z9nZ0``hC!ss*dzP|Wa7Glt@_8<_zS}m-Ah^A)A0cy(Yr$E<%F_6Es4j^Bf-9rQ zO=v&n5nI*!&3tN`{Nlkwh8PSZGBzw`Y0E`?MitL87P^ChTmD~#)FJqF!_j`{t6&T( zc(dNef13xHh_O<@&+;{AqNT&gwc2WHt8#t$tk?GSvVS8S(QH*qob{{sNvtm@z=JIO zUyN`S^h{96(`fkdAksggn*baBurli|e8*=xYWAx2A*W*f?Q=b+k$$7;`mu-i=G=#f z=>B%R2Uw7op@a0Zr!Z(Ok)p6_Yp&<~?9>?qYEUN6$`r-Vcuo#qerNI17lQx?2k~(( z(d-<`>mBrC)%)caLyF)u{F3`?&#+>Dys1+rSw*XS*=DUf>po2(q6kyYCMgvt@jZ%}}?a<0%9E9~3u&(|4 zE^uLwqr8>O^1xQ#Cw!RGeztz#ZQfo640>a(wZOh?>mj*vE72^inD7Efl&=vA7NG&I z(C_?EIVA%+n*-A7n@Twl=r9Gs&Y@u6>%z0y_zrO$s7c40Tv0nO4vZmfXlgVgJxcuPNe@4HcD;o|^Pl&bX4}=Qq{wq8`~2Mk*s0_ZB4@#EhiZEZ~Mmi9b6-= z*$PbNV>LQlqA(o`3+(;w@rQP194^pm7E52u$EPZvCrRL$UHAl%D0E-X4r-@04gF+V zBk!M9wfu^Sr-nifrN{g$ggEO>3mYnM03&XI)AW;?VfcEZOOJaY2lL5kM}@5^(xZ?l zLH3DAXmo0cXhS@ui|E&OW)vl$jqIX&|57P9?&u?&v~My1%PInJbS5gReSZ&WO6X|?03I? zy#0*Fg9ct*=Eu(V_av3cuW!mXB3kw^KyNsDzg67bF;&HNkjZnrccX|?Hi z+@roe+^Bi)`7-WA))iRTIrTW8iyEC-Tx^rj2YRaJq_-YQ>Y{WM;4CARwaYQP)-tN; z$Ut{7nq<};K?Y@DE1%1@8OiF%rbZjHov%{>ZG;ZsFxvQ7UbuG#ct70_JAhZ}i*x@8> zB^-@wYo}t~_s^$)JsHQ3&dJ2%!Z@;K@ErOjlHV%fL5P`xdh1h0Ag0HKxNbBzAI~~2 zLEx+&<9w`G#5Nz0)UC@|Kj+C?u+6xLJoN!>6WBLggFEdysqF|s!$N|?D2F*$^Ibxau^lwHcTFHQ-aLfu*8+azk0`IJQ}O>i_0tK=9nS&*TO7MLb>-fCB!6V5ULWu${!Sb}bqX$bMp5@I;8+DO5Iae5G2Xc&+J;Nz%vT z+Qf|qXBoE`QWsI>EEd^1dQ{izSW`-f-HX26z;BopW02!rui%^86Lh!$Ge%D1qbf4r z2R%)l!x^~)YkFX{m5Nnwf(-eDD}i-}P3(UWF=1}WpcXuiQ(u@h0W&|o< zju7}H4L;)?QGS!ln<>g?Ha{yaP-izu_4Tk%I>jh?CW3F2QJ>bgC#8KL( z)Q&p=bc!Jxq=r-R*b-7Cq4yb%2C2$#^-hMLCrittE5R=$M*c6grlj7kaQzskaqld* zuh&Q141DQuH*+WET@bdDT|dOc_5(u{BaQ+5EbF}J%lK--7}H?jfb;>2v7m5fA@A<` zw(sr%YP!HTyVN9d`Fq39&RfRU3OJAE`auNJZhzlZ%g(`S!~gqU~wBYDC^zp5_R0mkebO&e(G@i z8<)l3OT*jDs!Y@*CHa$s-)zwUZrtS_H8%!FAj=yjS>u}cU7aw8QAZHaa^#N%*m5eF zeIegPo$^D&x!=OBZWG+&mv>C6WTnNh3vY8G9pL!wa%gVcCy9V1!Vj61bsYWbwMFUl&8VJ}sMX z6jc$^az$>R1{zMyJzHL$cc9LcZes>a1I=jLl%B_;7l}>e7CfC3^C56X+ryJpK7ZWi zYbvi=F`xIQRO;2|rZ;O1R(r?^V4T%M(uhEn4PbFs)yF6M^p^|e|7iiTN|Che?}N65 zUrp1Zz!BWeUKYHf$y@6d*JHw?1-Pr#d5F8Rj!f?LfmHc?^JT*pwzm{~^f6SVFqIBy zJLGl`yu85PT3E67wsU_fJiaN<1-xaf5CcrFV56r!aU2}NPnE2|%_k_&yc*?IR2-DV zBe-aUmu@W$KCZpi1N;PGks9@w_=```(|9kylEP9yKC0!4-j{?;XL#4wqy1+j>IdK9 zmw%}x0Rbt#CRj#`==GmouQ|ZF2}S$QK#!R1zm3)=N1}d&*J^smfA4)ULuJt7(v_UT zYJZG~gQ(x)Qe1BEYT8zCt4Gcb4xar?<@w)Da9RF)NFBlS6shTAV |u-8!|XR)WU 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/image159.gif b/doc/salome/gui/SMESH/images/add.gif old mode 100755 new mode 100644 similarity index 72% rename from doc/salome/gui/SMESH/image159.gif rename to doc/salome/gui/SMESH/images/add.gif index 45a024ec7d05496d8609d3133a6ab800d0205acd..26350e420fdb486769bea137582f6b7ffc056b12 GIT binary patch delta 241 zcmVjHl) z00000B>)@%00_1K3kV!Yu%N+%2n8Bg$grWqhY%qOC}1F=#fta5=p~j9N3w{hq zawJKRCNBb5xe_JCjsOA>2moL}$CMTU%p_3r=1Yz-XZGZXvmncrJC6dmSd?H;nNWAq zw3)E!K%G&u@}%nVC&H&vr4H@7@#{s=q(`|Pv^sEr+ov_%y0ysGXi~Lwy{d#dmZ{#H rX?>Q(D0eQ=zbE|;POO-*V8@3SLtcw`vd97gGHc$CVV@wb;>H47JvD7|$+7`}IwZqd`R~wn$2y6&n g%5vzO$ZUbt2i7N+=GD$9TYP(a!Q)eRB?K6(0b2$?w*UYD diff --git a/doc/salome/gui/SMESH/images/add_edge.png b/doc/salome/gui/SMESH/images/add_edge.png new file mode 100755 index 0000000000000000000000000000000000000000..8a532e1d91f6b0b11086d1a225d7f16b6f3f2cb2 GIT binary patch literal 3781 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 v#<##IV( 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 F{{daKM7RI| literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/add_quadrangle.png b/doc/salome/gui/SMESH/images/add_quadrangle.png new file mode 100755 index 0000000000000000000000000000000000000000..f25b94d9faf26169a913f9749a86fbf93558d190 GIT binary patch literal 3588 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/addedge.png b/doc/salome/gui/SMESH/images/addedge.png new file mode 100755 index 0000000000000000000000000000000000000000..c9eeaf970f71c6a1306b1e11a10483e964df1565 GIT binary patch literal 8648 zcmb7q2T+q;w{8?ZngOIqk-%r@g7gl8g)T*lsDu&IJVPA4lL1hMP>>Xsf@y<)oeX!TSOH;n(lY zzXzmsf0pETr5ebs$omDo@OL7itYh#ve_ka^F-`h8vTl6aXZFpbjBJCib#I%Y^}O8S zefDnzro6FQdtUDq-S)VGsBD{z+p%bVk74Y4oE*{{%fE0jbRtLcV0B|7H#SyHPhCBZ zCSW(VwP$!(3VFRqH)-ZcoXbLJrQx>pkwY&Ur|2Ubciq#hj=qkk9v{`dZ!g3mor#Wv zoE<-h#f%8Ft{8~X=8(Kad5ttocslyogLAl`q8=gst#26FFYj@2aYd&V6u1kXU1i?k zQ}}hoozU}qSvbdIs#Q9XdncMbmj-G(O`fBDVb7Y>>HlQIFVw~eCVh(|?zD!`o>Vly z^0DG$X#fewMRKxjyqZwe4CR|nj}McHx8o{QW(9?`Il@s?D!Al|{M#qbIqIKtL@yOp zh_IzBM2!!b6pTRzzk3ic57}6?VT7rr|t@*s%aQxoU@k7r% zUaitg=5L$Y0+HUwJCdZKVc}(c8gD+{j*E+%-1WN|0m{h8041_XEiJd2 zZS=HtNa^17v#FUPBPKd+HCMPgrAvm$X$N*0y-ZJMa);-YM0sW?WdRVo>|U=&+d*$;VpGyXm4Uu`s#M&Yw{$$6ix*Sz?~cN_pBm2*+rl zI#I9-2W3~Hy2IG#7ds0`_J)3C4KG@{(aXFFm%<^s?drYe^K(H=y-fN8G-Luwmn(#$ zAhkbYLc}>TF}YSSILA}pli9F);9y045FTT*GwvTknJ2i=Hi z2dZGb1d&j_`X8RGo|7KuEBpBnH!%biyjO<`xW+|b z&JKU?X7+n?e@c}+SvIgUyhO>m_>~l|DgVex=xX$AnaeAekDS@%=HQ4#aEE;fV5Pbn zAqmMmI`YxZlYZ=~^}w;H>z{{`O1%Zn55^%Be|?()S6p;kYrKC&{OAg8LEM2k7PTK> z`txTqSF;jdq7eacle}?HkbiK*=G5P)*Yk4NvDZ$_T1~E!>{n+gntYcJ*wN-1zK6(8 zt|b|k2olA`7?1L+q5BxUy|;ROI^*8hW(oPLglo%#1}sO=wy&vd0B2OgP+{jv$%S5s z&(+SrC#rr-8>BMm&!Ln;xA)23G^cYkWO@@5xX5cq{V ztfVGSF^UbCrg$*S*oHRFyPJlL*t2Ej+mwrcoB6DuoE*Ec8ZSMS21=ML`i=iX^L8Hs zMo(X#h9c_qp;TJlyAI{8kABF0$oTGoKPY{{&A6v-A&`sZUGxnh`6HQRc13MnUEKy> z)l8AWJBHLWszczn1t5ef7o+*_iq}W%v+9Fki&aNc{uzq)KsX&N4w>Q^h&b1s;3fW*$%} z=34Y>_GmI)`p3x$$^>3^rg&+A?OYNji+Un1DYCy4Qo^^`?r5hbxPJKmQ=;ZmB=?d&?F#2kkOw|5Ot^ z`opbZB|f33w7zr>>($@v9BkgIz~0%>B+zm&1gm1cExJ@-&^An`m_rdh=Z3A{Oa3v+ z3Qy8n%772@ITeS=gn98T5Wa`moQEWO>W@BeN{^-qbFk{&Gm{`dPuOJ#7fgMbBf3}w zkr!U|t}|WH-I=(N19wqu-!o}@fS$&s)!;swo$735lqnh{2DU zixeYc^goDMspO(>Xgf5DrNb>(YMzrd$Wfv87JsN)v@Dco`UbVl8~83&?8kpK5_ z(@kuCRpV79&jDs5Ovm()n0r|82dO{Nfoa-!Pgz0c{^EH|DNcr0&TnsEqO4$Vt7>-P zaqhhT3gv8RdeJCMv9@G%Ev%~jEh*bZSFcIu8n7#8azQ!pGeXwMPiLXxC)k1E)7 zbPx8WsCmv!3gKuiwur_LCE8Dk;Rja>4BBJlhP1R?wHkb%VgwRde~KOAaDzH?*S}Y& z5e@mFVYkS)YSc9gAP)#fgX|*PX_Z7CCmnQ?d2x+tUAjRR4BVH4!w2KRV^#qs1v}^5 zo_y&h8A-W6tU4hr`zhH4rc^Us8hGr>^9d>Fk`rwkCD2*nNLXo=@fNz$6JKqGFZqfFJp+ z59RmI5OfZ)DQ*2%PaT3xVZ8L8zJ5)7QKX7H8xCt9ZI<&&#U4c5g%kb!TDmnGL=f=e zw)6bjn#|xF+IdT7zP~X5(`;d63-^|Gnf1hIw)>8P%gXKtV9FZ+3`k^GR0#A8P+Ap$ z89OpdwscC|x^o*WV~nej3a~;ig_gH)FrKj?J4D_^r^2Z7tgj5EJkKL7mhr*SVpiay zL$^5J8YPk_OW_~hNVx&K02{az4!S;&jf$YA^4OUaNlQ;>7O^HqI4EitE075Y*;~x}&;zD+VSZEm6>?`|e+l&ofk=Dz?yVKmNV86X zf|iB`g`s(XU4t)7<)J3cmbaLo`o_@p!`uL|8ZzPw)`x-bh7|~4l<;?a5a~^6Rw|Vg zw!zijbaG;?`s*tWN%{7ybO(8}iI9MKrg*m&=qr3GhpKeIAtw+gOe(c|0L^)MdjtPA zpY(;tgdMvz_%?hp^P<_3O0Us1y7(ziQ88#|8-EwMkb=hi^}S_)oSb~pMN&cL1!`2T z-~S30^SR71tlv5e4f)tXpQjdIs|NqsTfbLV^a}4FJD6=EnzgnoQkc~dLgFd z^zv@Ev=67ek_jHh_MWbkP&UQr30Q|n#5V8YiaY3OzHLGmRwk|I$Y@eKpG5FMtzWeC z$16-74;s}zRkH1H3|dJb>R`)uYN!0%TG+~-%Lx_Tx3#mc>+kZgoGzzsz6TXGtsPV$ z4M$Zx&4xl<>jt~lJHXVIww|+=G^th}T_vN5M(v$LxtpRq=aiJ9AjARRjM86x}9p~l{<0)y0x2`@UH>y2uH)` z@v*hzqIWNAcdX)L)%aa&Ms8Rp$g^lQ@j+?FCGVml9K~{Uh_^na#HuOHxFjYU&{Mti z6;W1t<&>SYbeBs@SY#YYPvcmsB`FJf0*8N8ON);ss~uJ$eT4c}LJ0n8oNYXiBk@Il zYJ#zT*{f-Ku;f5m+4k?(xk*&v*ja-|+S*j^?Z=W~!FJ9CXBxW(bfO1Xn3l$`sByO6n#@u6OebL;ppq5z}n!x zcYLkK6DFWm+>qSvx=kN|xjwKw#_?w%hOsUubg`4P@%oCucmMwK z(pXG(=+x0>5Ju|jMg?|38AwOK1t|Ml4ut3!$>&B!YNn>F=9O86g@sqM#5BxZ=MRKi zn)Nov6@?d@&P0o7JJB1C)~;c_BYt{IYhEeZ`cN3avwbt18)6J-3XHHTv`? zRn-3EN9s*or5{j0*u^SGLWP0yWKQThA=bz4IkEkZ`H&#OPFNHo*2e+($~j3wkX5qv zxJw@~#onfPEUf%V4!C3-MV}gB3HnoAp%qme>%(K;Ej$x#_ep?>qMpCOD_Df~9f7U9{lm#76JThG z1(DeA78mBsXe*_lOpqi>r3ajvoyz>6W}1Lee_a;C2c3)CGCs_FJay=6vN1|%`SnW= zFtAySSCC(JVSXX%Eg}#O{hbddvF|s-B_}(on5tp1!B2JnAgDHyWW7u4?pdE<`)?=w zjQF5|6|?BmNpNm)&FY*?!GFv|m(FG{OwVZ>J)Hs5BYB9qG^W)0m$NQIA%Cv^#=Mm0 zcK4su!_2m4n*mt&^@f+I2Av8jorc!Xnudvc(5Duffp7*M{?F3J5rb8A=W*{Eibvv= zZ2ykkYFmXw*{J#mHN}F7BbTcS=Ql4i4Bx4SojXCGqP3Lq9e>tB^5!uOTsE2yO4Rv* zOcS`Z?cYrF5vAQb@jZ`(d2iMTu~*IqlFo`9tX$*}n5@2^AJ&+a;x?y@!WTsKIgHYh?pCqW9K}`C_Jtn^pG-BzPrv zVY9B;B6#bk`Il!(pTr(g4cI-)@;$o({CmUy`V!weG_)?aa7OhkOE8IKeZDQo_?z`# zz3RQ1dEz3?rVeWczV#PZmjvS%wQoLs;zVfY_hmjX;jQE?sjYoC{>8v1hdUHmP=}ci zb)6RPp8;HH;_2y`LV9aEgU#OXX{$2J>4o>OHxBJ)|9e#(6nr$Is+lbsC5LTH2T*D~ z$GKvu4sE`YT~cskv$mDv0j%La!7X1ftou;TC}h|PD5a)q9H>p|U2c5XKY1eQHmwFg zv7McrfJt*=7Oc(1@vgG1C8k^?D9AOd^~)+1@lBVR`Xp8M5b;;_b^iRy{PEJkr^07v zXP|*xDWUUFhcyUaC9k{T#MEJNaq&RD9AmhQ_qtNQ;^`t$Mf>*lX6>9?Lu&|BRQ{-6 zy+HBmAY}k95((gRAAeuKT81I7pkSA{7QpC#%mP(jZyj%n=4Y6UPaWzaG?&U7=5H?M z!{!~O!UB|Kf)?ibBQfmq*OUyY_sT7_&*iT#aI>|ih|Qy7T_G+$zPL8*&e|0LTk`pH zY>Y0u{kh#}5zfb8K2;elWV=mE#vs7lWebA*EWCFFj2>B8-D?O9=BMMPE}Wv`j#;Jvt{w}=@Fv|BLOpg*EDTkkhd+g@#4&D}O>;2<@cVFp3A25G zG)p?>gI?-H$UM4OS0$KeEqDyui8#f@`lz(5irfhpO1=5gc2U=o3Is6uE`Uv<`@F(7 zUtNvLO87)Qj)N@y{L+fP9J&g*VEo!~W($vgy)bgZo7yh2&_5iw4m?Ma5#Rjgrc${r zAfRl!7(Zov*cODZw*E}cc9b#LDiZ(}gVJ}78AVGeuJE2-+k zm`S0X8o_7(aNti$Wbhjvey?XdJFrb=!{z`V7QvA)8F;#q3v1N(^V+}!^64};)}VG4iJ!EFP%g~)AO zTQ?~jm64HYy*!x#GA~7HAvk?@c2*EGI5@cWt((mTKmC~zmY;U!lu!q|6 z@jBXkaYxXoXDNjWe>ibpKsovi{IB&({DRJl7c|r*3Ij*|2$&plbnDZH58-KPw4e!h zqv5_5Lt1wBl;I7V%jjdXiI%00l=OG*&@wW{pfSatKa+)j{VL#Q>O zAy_(_=o-a?wJ+J=sUI4b`}qBjsVi0bfrJ@dy8tC1o8dn#D6yi$c{1r)e(hs!S3}$R zA~qy5Fc){J>ol%sM%A{xf4THVy#OXLZ_a8hcn1&+tRJY*=yRZv|JW_s8;SmKfaAbkKP>N1qBSmzX(Wfpw>Hc^8RmfJr zWl`^A><$QkPdW^YjQG>C_vTF=W@u}G4<}5d&_~l^AwCZgv0&dnr1^hVME@25KBEOq z8=(ARUla|cYyk%D29}0;i6r3;cg(qL>$_J3>|wb{gP)9!y^6hJo&6>sFRvxA>dR*B z5DP}ZI}3(LQtnO3zIMbg%wq&E;s2+2`TqkB9j_x1Hz zPgZvpS68P+l2X%>5eMp}DB#)|z$8uh`5kQFwKvoxeOAEiG;MK7^_HLt{{#Z(SnWLl%@U&@*}a&Dl>0WBaNyV`liSj-gD)1B@eTzc zcS=UdADNr8Aura1$fKT&bOdAD@J0c6jafG-g@TknbZ*lH4!znOo~n1f3#idCG`eOp zT3NuTD*XQ<{aPb8Ya~-<#1{1_vxF19{gpd6 zh-kj_l10Ck(#lFK-u14N!sU@}mtBgpzTd%5#)cg8tIB?3+=@i-(k+V*wlMPkETN4I zL-Qpb#WV72+|2bo9v;$4bpJ|wYF-{I5D7;0KFmVcz$Qg0K5k$iWFbo) zE&;RUrQgU)P;n@>E44D`GIEm0A5F`j%PQjabx8$A#Y?|@DJm2W^b2=pIr zsA*{x14EX)vE3Np6smaiP|RUSX@OtPNF|ULk~^pZXqoZxafsBTp=T;8B;6^Hl&hti z{`(Q6O^ydzwhj(N9-F`J0Zk2}j@jYCwO^f2LGou~=`QoF+0E0kJ5+KBj6(Kvq?pF@ zvM)uxQ@bajvpJK@nGxAJnSCEoF+Dv49pG$W>$US0e)f!T02YHx(_rKUtY>fOc(nh? zOZz%+cb6@Nv|(oOYjzC~oj@StfO11jGDH9b7$z<$v3%eUG;5?GLxTM`z+l>Cy3^D2 z6lNJGpnIW$q~6NTb#Kb9b4FL6IplganFjkWK7AjwC({li;0tkprrbZ7aTjx+m!A*D z{i%s=Og4G*;OAiM+9m0LqpCeRp8%r)JKwtD;sLY_3=BK-ZE^;=6P19|5yizLzkYQb z*mMJS!x8F$uhO}-3qO9mCu;#HK8K;adt4IA5mPE!u9QV8N#C(}U1NRb2YAx&E$D*$ z^Tg(6S>X6^xD0ch$7j5g*$lS`6n0zZ%!@3J7ot3Q|>~pS^hT;;Ur21!aE+ zv6`kPXNack0r`RD8!IONRyG!S%GI^C8%x!mD_y|3i;9^mMC%H{)DXDX(>DN>kYGr` zn|{`U3rEnzafEwN&tZ!Hd3>TNoUnQe)l_TiuyOK&WtW*Z& z=0D5EzsLqFit-*mle2Kb&;JMMsJ9&M%GKlDI7lO`nBj9~xU8%!^!8z9jl=MXZ#qf- zkOE4y57^O1r_vtJ@-tLfPxnFk8TzZ{c?oEYeq}qOuWx>_%6@~J5sAIIxp@PJ878o! z!WYl%=db4fe&v_96B0BomwxuTuDBThr-?PxC zPoI8S>46f(2_F0@(*D&$LSoYx>FJN~_hT4B+9MO%D?5u9h-zB8e`pLJ;cZll9gadM z1ut3PvbsFb$n5{N4%*JRh4u}~iUo7!Q<`mpCeIX+L^zmf&!{fYAqn~|NRxVlON>Ko zn%vaDpY-I8&ZHm6^m=WkL-=6YMgDS(ZbQGRD}z4uW1*eVO;bY3LI(t#a)AuEoLjPi zBb>qaHke%En7=s|$EqdPf%|(t@Sf0Q!-qtG*CTIg+-a|@aOZnk#v(*~><{gkszg?l zyzbUdi`}H54Un{FH5*usEZX{)9!=`x7Ow!uXbFGYSb?sp-)-KkIm;rpzx#PEfSDuNJ@;(d1Jn0$A{jP4XK#!{VXZ% zaP_0l=xy2Ar;hXN}} zD;93gp>>F-1XB{OjQhwZ@W3n&#+R$8yq{3rJ zxptFWB|)~YdBRs(Lqnrym=yiPZV5lIZ)z`2pQ~GICnYA&p_0HL`KQrA1fQ{UAL>;z zqD{|`i=afH#ysrQ>^n2B^%6VOX+*Qk(`}e8*2_+@h10F^ zoZE5$UBJju&%MGA^)hz`8`akHgVg7i3SPc^XmVgHbc0GuDTsh{OZU(%B{2g2=uknr1cn;Ad!!kV?ijlB zJpSHuzIVOv`+aAfKh9b#7HgQjpS|yW-`9Oz*M1^itI8ANQ{#g`AVNh28Fdf{OBwik z?H(@h+pX2169jq;Qj~e|RyzbUz54rme-8}umXRgHXV*!CE1rYnl z@g+ls!P_wGCMil*V3d#+r+p$`?i+X;SgtL!Bpr0}oU`gVXXwI@a={Gh%m; zXu0G$Ra4;sQZaFx!gm7KTVTW1LT1LS;B+t^IB`VLT!ju7mpSJ^U1sX9KCEl+%k}u> zE_;{x!!eEb>OoQuzv@=oPhw!3TU%^wY*=62OK01=kQ)xA9a;|R+SXkR;RZ-|6A4&q z`qY$YZ(rZNq}BTqU~^+u8huq3a2qtQV4qIEcahX0Z9pj~>yzuP#&+e*Cn=-(WA`k2 zp_@&Kr%#{0u{nA?$nkA_-RiuJELI~7>qsq-&zoivqxy{f8EYx4Wpe;l_7B2#49v6w zop(C1bnJ1q7|D%Bx-`Z9H2=_3R~v)hSxVZiYzMt8NLEi>EZTY{ZL)01+j#7BFfWyk#MBe~oS zUdM}BaLHDTb8Om|?)gSZaN_729g^_($nt_`)^@3UJ?CM03*WWeTyD{rOa;*oF6 z2y*LkVwRjRD{W`H4uoqgO*eQee-$&(TwFOY9|WhlbC8frzu19)xl|ANr}a7W5dz<5Tl9RUv9YUf0ukFJy?e`3~`IN}H2 zWsMVZhL(-369XG*^7r4|^ifH061E+k5TaW+#!M$(U!H2bF?azt@KxBNc)Tk`mSBx{ z$8TFOxb)VY%M+z`=kXSvKTh+~{;ym$hLhbnHFH_>_NnK>4+iAC-Dp7qvln}_kJ~;> zio)}R$c}P;!6Y-UEg9QjSJB+h$!hxA9iK>Zzxg|k z`1L4>az<5BWd$>@^9MDHIUo8l0ZHJWA&F{AinfS`-jR#C)auh6DpVBBAPzPyEO^EL ziYRlJb15YfFFqlzyFg2Fah5^9IdkqNXd$@na3B&-e*1nD1O0J@Gmd##aMxuq?X^)Tne(!kL3ewQS@v8d<>$*yxKD>wf z!|*C8Y6%0ab64#n`ySs(f)-z&lloqd-^r(>Zri}836@pMD+Q6XYvWaq|z z?J%;VbRRyE7$+j0uE|b6znXcSilFi7Z{UpYNfbrvz8$P!_wSS@x(-ctmujEh%J`<% z#1C6*>O$?Div)Kn;~E`rjurX9NN}dd9Y<88jLt(5#p5>{-2Su(6g&MDag+BV(Qn_= z>-q{dcpo?NV@Ol~LYVt?B%c={&b*LIX_vA%Ty54rf#GWJme=R%2zD(Qo)&H(@yJm` zzecabNMUSj;q-EU{5-#)pk)Di4+!4)_`<%2@LP2fzv8xy_6-7h@F>#qYX{1CY09rj zN>6OLl)XI3t%g(R#%aVRH;(j!sn*hZd?+NHZZ-_XuBs`bgpbfp`&`dm+Xon+dpX|dV zqJ;(=|Jl%hPVS#&jv5}j}dr-h|$8o(+h1iDZRXPa*wOfA(-e?=1tl7`Zj;f25 zJ{gMYr&YbVRC65HjC^0R6&al!oeuk*iB#}DJh!WvvDZ^&A=CWJqu$^S;Wya20+ZrQ zP}ucdp%Ilqg>dYzoi-*(%rGRKmL9DenH#5H0?h>1sn?!I!`T+x0)4u3BP57@hxy8J zwoCl5uL4vyjjl_$BBN^XFz zibP4p!|}l`V;zHG%PE_-$DPR9{9 zFQV#Bl9}OBb6SJhh1_OqgFd(fl+Ax>8ARmzFt{CK`CVP}aCloYij1%v>=hz78n;Zi zZgyTu-hPm<1S^;xv{R%O_3^6^xZeueRFADaf83mS$u4}G_JmehVXf%Mz^Ad4)}cd- zc!F%>`cr$WR+u#v|5pmZ)M%ib=2^?0j6TxC+T6TK3TQL#f;MjufGz5nCWR^Q&BMBk zC+W7O=I!?Vkxq8-u957M=%&e-fdEVLs7{a{^wiY8c2^_g`uKyg@>L+n$*Ck9@ok?+ zx<$s8G%4_xflGgu_phw?nVBsYS2`_tC82VLmse$em%~r4_Q(7mCh~`WTSIj|@Yr0U zihbW#FMsIa(Zl!L4JH3iSGPsT9HuOY-`Aea9_k+!{G!uRPLj(agX=Ni$e3#Yx{s zwB{EsHmKq$>zRu9WKc~GpW4JnOqptrUmd`mCB2j{OQnTansXG1(Ea}_a zy^j-OM>K_4knx!DwO=;Xe$Jn_>~AULVOPX$JFNs~>jDP}%zgZ~@3SjB+^4ZhnkT6i*AhJsIQYM=d92SkVr|%ox>U#bDeJdV= zPe9*_$$WF*LU5n-OYho4_hr)x8a=-bvNLQ|@+*73(gsAKv`zJ@^6tna9+=j{|Hsnr zszh>P5xE>Ib&s0Rs24Lmv{Ud532$}h?2mE7aeE;=K9UUd@UUP!qH>2h$+);UN+~~a z#fYBzi|X|HN-hQmyFQiG=grx9HK9j=z-aO!-?LxFU^-D5Utft(;`H?f+yVju08tJF z)Add?o(KR#YW=y5&L1$y70>9YUx!USrHGB;;pa^5nJ|m!U}V#p}hxUo6%W z!39qAn5;#9vCE`eWVoGDYT21*nwpY4+{=57`2%S#yq8d0qob*=SAlF0lObTXpB;51 z5Qu)r9SxcG@8s2Lmj}gcKi9*;6>|BO3s_RcVW3HAIJGMFGmdB5&0K)=k<4ey=Pc); zOoDAu%seC((dS3W;RUpnFyeYzWO(>T0aRy}OH!9p!RPSq{31_5LEAVQ!eG^qoNxt&C0l}rQ%|d@ z2!+aiS=9dhfjD&%4ChC@0EU?q6)!K*RH@0kwjD6>1;05E~Y;XbaF4DX%$6Lq(Zm!7)~r<6PNqwq5rH| zdpI$Nw`=kWN?OK*QAjB9JGLy#+og}#e50`n)b3CLCPc?!h2?<7`KOia+}!xgOjJJ= zpU&;LSEGO1X|kyKv(p)OhTt#)i>tGJ+sU%P74`%^>rqxf)=`O=n8i2OFLctJp(UhD zCx01>Urc5Z+sye+%=9-oNG2NkiTvsK{$3kuDi=r5g-tD;(KI@HTR3{IL$b?uy-PqD znYD!yE|@c`rgc|ZjdUxZK0Hbql6*iM5xu>=4a*6Y36$w`a6eJcM-gBJ zM6HI!tj!|;nC6KXMgbjs`j?O~L zKs19?Mo`clUKFd-*Ml9>T&BWC+z9I#X6kQn=i1-j_h>Lk;Lsm7U3h#Oujq7rr+76t11!OiKJy;SVsx{y_r>0EpqT_{zk@ zk)%lw2)SECv$+5EIo&~NxB|aE1S(x+KkYSqqxs>Jf^MCRQD{(cVX3rCT@@I4))^rT zd^6z=r)y7*kl(S@=t`r+Eyvf5mDQpWX&F^RVDvP8xm{szia5O(!uu%b5bjF{ppZ$t z_|(;6m8N-A`c(Q)4Wx$l+wM~T3*dQ>gTdS__pe_dHwrw1G7W8kA<$B<&iqYm8;U7+9#NIMi}5i3JS-zX;PgL_JXy_Z z`g<=b`|mPs%;nW8-2nWV_!dY-tuF}f`<2H#YQblFw;#lIt>;}ZL_#o zQcL^oq{(3ePsoq(N~Rp|9-28%o+*7wF%zPylekDAdhN!tq9gJ$qQObH7E3CJ0&^0bYb1f@&!u!mhL<*Q2E3=$oQ`t&DY185!!4WJ$UjF!9C| zkY1aDNXRf1Fho4LdcyANf9IgAj41ZMr70U!R)$0UU-S75GEFHXJ$;7WTt-F|K?3go z{rmUH-%ZZFHPGr9(hTHY`s#l(@V_mDe?DRKTVSopIsPziw$s_(LU>1}P+J9fyhz3SN_4WDIy)WsEW1XyQhOK?Rc zr6qZ(3t~Qt{`o4lYOFH1t#_;a$LlZ0W)w5;=BQ%H)So&C8pMCMDEXAK9`vesabN-ynnt~ir>V`qMG(W zHCeQy-gKPq?`bcirU#B4iiQ4s0R{6JH`5O|KarXfl)7C!6tt1w;xlSI*koS?R^P8> z;M>8$@r>Wl@7&yFS%*=#sL)93MdT?vq>KBDMpv9&fR3J?Eja~6D);qEcg63?>~-Ujp=lx_+f#_hq9P6uvvSfyKS_0O8~jN8Hp8%0LaFm* z60X{_I7dK7;5GkClWIH8^tihJh=hd4Rxa|QEsUrO8dD`-F!L_63(lbS;sw@HXEgSF z&;#zTMwTx|-9pxRy&yj)p135@2-*KR3?Mq{02+o8(sU0DbnvV2^748By&22nw&Ap` zG-A|VbNv_yukH0*v3UKmF$nN`i6r+PyR7ybw*=vUlv72cJrCD@Iu5mbwBf0Sz8H1}tRgPV17J}$@yFP%ZOk475$}B$>$w+&pqWGhx zhBBa9@G5u(E>VCzAuCh#Zz%9T7xU(44MsH<0JufXB+zK|g3?-qLf31fjJu*LZ1_4hWjIU)^9t-4AgkX;;hifJyPPW2YZu9nCbq#ghD8Q{hd}Gw9eONZCppkvJ zxz`+38PE9sa%y6{s`mHKl2X18oE!*Gu3=BN2;$X9?gj;4U*96+PzeO+C9VcM(@Ks1 z0uwQH+wBn~I!GAj+~w?Ps~v;i*%Kh7k<*yYt>bdw@H?ZZNPh0b(1|5UIY{PMEgqh0 z*L-*aRM}#Wrdm0W=Z_ve$}1=^8Aim{T%Sy<^?HM?*g443An6+Ya!KxUZbB|=gDVI` zsnd+xgslEaD2@I6N}{1XZ*To!uKU5E;Z>TJi{T#%y8zI;sQ2zCMQ9E$BjVEf3;ali z_x;;C6<8j7EqI=0XvX@h-oE9Mo(^bK{GL60xLZAY>l6B(%S4GjAS2Tz`_xG@O}JxIbN-1c~Pkqj)94RP!hMa>{=z+<=-D6 z+Xk0=;-?p85UR#(!-x(JDBnNorFOf#?@!50>)l*zm9FK`IN(dE{)4wECqV-TQibAU zV~G*=a&owZTBR1vk=6L;?=~Ho78=y|gAyKXcc5&AqUURD`UZ z1IpmF{>0hYS$o`bD90iyLdv$T`_chG+VPD ze)?qBnRZ4k97{FLnw$d_!v|2nB@dP^c_0RE8+r#|06{2cIn-1X0n+CB0>2-e{fl&C ziZqFigEZyOlX8{PHe3oe!pla-#$~56<&tt)XKK~6udP1*7b&!htF8dZxwiWY8P!KP z7Gk=MCZ0ve#}F1EzyGuG{?8?6oyh0wD*81%4Xi2*b(@g|gk+kd(PmvF#JTPl?Y}b5 ze>Pm#R_`8wzoF@`0p*$R?Bb$!mX`q&an$cJ`J`YuZoo28IW6JqDh^2bP5!X|TJ-;& zBIM10^{OF&6k^nJ?*(*jlpBSNsuCS_5-7(CcJxe*3V?(noeJhn-aiPDCzP83oNGd< z_UyN<(bKK7j>XHdg~0ow(FbNDYtxAJ%Q3eP04w?r{`}8f{7tmiD+&9Dht*-bvjejd z-slEzA@d*R3u_05ho+MiB|oyWKc-G3bJW*Bb-pJ zOR$@+3dx+%@fdGkZa&s#=j8lRQ1^+LQO;4WnlG=kl*Qjt5-=bDlMU3u2X%e!H2v%u z`}z!0DAd@f0u30>UHVFy=RJqWznV;eyPhk|u7BHxYaAc}i>qgQb5v5x(5ll;BRpc9 z*cC;UQO0edv7bLT$Hp-x_DLM) zpTo8%U##va7uXc^pisH;aQaa%n|-{iqpb<}+1Xh*=84#W`@C~)I2@i^R3CM5;pKI@ zN!RA?vFUMww)6yg2T*JvGYgA@FsZA+=Z_zP`-!BkKG&WOc3@yj$6h)Ba{bBo|3t3E zPwfAWZ=Y6lw;$%38(nPr9&L_A4wnz_)nZf=di5ut#tgoooLfBOufXs6?NdAW>`BUk#i5NXf`!)6$eZJw@6= z!EG3rhNkA&!Y=0R;h2^o&ttpi@l^|LVM3lhYihe@Eu|EWL$VaH)ogIF-THV!8o|B! zV4{Q7x!I=@5_Iscwh=X{0RSR(8cjqtHa3>m*7#gHmB*V9jf`{Z%4rFK8?JZTe(u-n z>f6z&hLMCxoW*|mD-pOyh;Zq6^Zp%mVF~O#V4dmcC|X&ud7o@!%{%TJ111@0eYQdD z$B!SteT}uaz*80$d0TESF0fQ$6JKUyVB@5%U|f7W8#}vA1GcmB#py1pvEj0{sRl%U zgK5)~I`X%uoSYoo>gfSbQ&gKp#T!lijxGj&Wq>n)SlQXLs!9@4QmFN~ zC{)Avti=KXU%d3WW9V~^BjJ7A&OfksDy`ZdEi}{J8uCEr9Qjv`9+%|h5ubtQ3fWGQ zo4iNzKL}6j$NMCc^`3ly@COy?R>yQiQY^WO0u+Ww%fN{V__WBNA?1m5*z31%+ks** zIUW}s1vVt%b@a8aF2&dT6bL(yO8oM&SttShOMp9j)B@7}Q)Hy#PDW9)ZBG67G=m1O zg~M}JHqQIimz%+<6L>^)+2!SNK%xTyZOuAYz&ue@RQ!^d$miJn+}he&bcZl~(PAK_ z13Qv_zL&k^DGv{E*htHgnmB#N$ld?wBB0MHDZPmJ5+*j0h|L1)opf*RwRCs-3QH6- zaJcX;X;oF#qS^OhqMX{9=P;y`K${V zDMnaHzh$m&gcr)k$2VO+jEKRDDk(;lA!@sxNQcU#$8V#vSgf#zg|nuqXxWCi^G~v0 z+cE$}A9UxZ1TD(aV}0*i9!g6~ODI{Md_&nayy^cK9HKt);$mXREG^IXL;t{VgsX>9 zm0PN|2oIg_^cxYL3qLnbpe0Ocut4;a|DUBIqAzeuv_VNml_{1>e;uTKx;oc#CD!F~ z`UOy+BpZo<%^Ei>#Uy?&P2`emJ9?)K13Ei#s}3?={E7D1IJb<+uPI??gXDhdG`{b6 z>^~Pe%}{@E+skx{y9QO!Vz@IXIazlMSK*eGF)4D=4(0k}BE^U^g2n@WK2RF(h`qkg zJQ=@aGO9@&J84Cq@J*zD@exrYubPJlUh@sMrqOfYb&lYYPvPyVHpWz5J~i#qV++!j?EthRqCrxdakGGLr}*F8U8ti-}j5wLROQG$=m?sHT*CsW6BG( z>C@%%6mVuIjF~v3;afg8j*>yD(WJ2>-9JB?+W?-E^LychGJ?6Z660NuaKMsM_3WZf zh#h1S`lAS5o^nz)2OMQ6BelJIWo5=Ou0KsJCCtMLu@v?t>3(l4!KOgLb<_<0=&>-& z?GzF7f+@W9WtIlxSz=&>RqN#JZrQxnse3;XU=nhNt8=KTMI{~rC=aMYCqrQPvu~(Q zm{n4{2#sKS1EF`%l0Hls+q$n|`}aFipQu3NyOAll-!$(s@E4Wur&!m|#-G~D%Ba5f z(Ob7pu#kR7ZS--8B80Lij{*c6HzZvP zy7rPf`fi&_vAO;Tbqw&nQh9l^fQQAN2w%+?DsV?AshxN~0ay6YhY$ocU}3SW!q7C% zy!>B2=Cmob5{6pQ(n(RjMtX|?Who3|(__04=nXq4`cikS4!l2`ug~&o4^4@MMXJybP?fct1pf3@7-eI YBH44sVLA@L3tb>ZSyh>mmqtPV3mn%}d;kCd literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/addnode.png b/doc/salome/gui/SMESH/images/addnode.png new file mode 100755 index 0000000000000000000000000000000000000000..167a966b8a910265abd5c871399ae26a9ffa054a GIT binary patch literal 8888 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/addpolygon.png b/doc/salome/gui/SMESH/images/addpolygon.png new file mode 100755 index 0000000000000000000000000000000000000000..785a6234115160d8d2c7022412782e0b1fd88dc5 GIT binary patch literal 10032 zcmbt)2T)X9w`HRUs03S3GH8ARsyC z9GgtjJ(uszn{Vd-zj?2wrV6U)!|8kWy?5`m)?Vj?s4B}5-J!Yz0)dEL%0tybARI;D z7l!~37$NS8JXpCPcTO)_4I5lE`m+(lg%eKh$j0-T-Ax2xMeJSJtnJY zOd>M+6FWYE_S`_%&BXIGN69s@Sh-oR0UOnquU>_Qz~P@vO-v{<#v*@*#l?}KntZNA zT{LkqWkX@Jw@JA-Q}b5}y4Z#*PJCmGbhV15w`zWil85@okN|(0aK7xDPJ7-EPl6)W4eHs1vsGF3u#1aEDpk78jSHhvMUOi#w%uj3~P##QE z1j9fsb^deogk;I!N0VOubgAwTNL5O^yN&rbU#YuhhM zr)bW+R+d+n=Sgtkk&&G?)f)Qx%F4>bpj0tuX5JwsS5MYPhuHTuE@=N+OV>!&E}L=< z9UWO8A3B`j`uWKWc0$w4-i>x63OpI6Mm|UF=|D;&)cutwkRI$EPwUfp5(>Ag!MLSP z1Fz`s-?d&v5JMA1;;3jjd}|;>9u&_`-F{}3`_JrVm3;L>fAsP=T7PbAtTJsQB$yoG z;47jZ6`-k}ljY=SjQWAKK>YCJ>UzQaV;2;Dgvh zx%U*3Uo?ct-~IErQ#SpK05U^-C+sfkf!oicA)}++8S32O5Li-+Mj_$NcX9!odbLA8 zG+11Ar$eSzAe@3hvwGepYjJ8?_rI6B7^$hHR$BLK^;QP3nHqP%^jn$<_uBY*h;C+1 z))<>2e45({DdNnU6q@J)!`CNbPiDFn*9D2AsuQ>0TZ&vAo0XlWx0;pPA9fQjE`ICb zz0lBA?>zr$|3az}n|^iP!-ak2W7M}6RCGRKvYXh@;&54G@m&;RJvcwB=CpG!L`qfJ zM_)1|B;;s&A{LC@>l01zJTAqdk#tCmq!n{`Nlq=N{Miv5SKU9^;Caf-!vh}Xr}Su} zs%l8pF~#(pHVuqc+hqLwnJ67hGMFJ9tYdj|ft~*;(IZ+=N1EYRN{Ymw5Tm!WMn1bW zyy(f*tv+)DIuleAHaH_dDpSrjc6<2T>U`bN#rKWhAPUE7P(paVWZ_6=USj5UleW!D zU12M?A#&es)_u=b*b(zgxkVoGZE{R_4=awMwegvk=-pY%%h-fh2qZY!FS*o-q&nWI zo>Ds9ond{7dh?}gp+rqz-}%#6rKM&hjmV4VJ~*_Z&W}sq`GpVMWgj8NMUPwKCHP9E zh6@ORq8+*}L2lx7wN4wY2nM+)>`w|R1@HC0C?8Uz#eWu3E$+qN&COQTZ#nYihNvS_ zFqBIQ%W`#s{!)Aw4?%t@Oi0+Tc8BZ|M30+)Ve#~B{<8j#h)Wrqg`8`-Qq!mR&t*ci zup4i{g$v_O5rQn?OxUIDiMX$^mtw?@Od8)7#_kQ9rPQ>FL-9#Fv`*_{(xnkC8jRyD z%8jbBRog_7E>xiAu;l>_`2E}CZY%Mc$?U-%DafxaA);8Xxr=dAvq_=8Lv)s5eO`}RNSTXg} znQ9ohIBp&08~1L1`Rltr5<3wveISq5y^2?Ubv7b*IyX@q1H6?Xem$1rbgsy&>dUS`{peAsRu0Owgw0Kpi zC7iOSC~9^-l79Ln_Nh7l`YH2Jiqq!3z}}746^C2Wc?E<`b5Yeu6*aZn#KF%W-TPWm zK^WE5){_#mUq+lun#<=Vs=5~GU+$CebnN8vYGLy6o>Y44GQBOH;c;t5ilj4D8@HWk z>hUOEt2PDAGb)PLxH;8F(?VZxn3;TA;0kvp_7CWvI1q{zQwfw#5fwFjBiFzRkEOC+R_Uhg-fe!iyNZ%UNg=b^2V;)J`YB5UQ`?U0Y15 zU<(!%^83`Z;yWxqzt{|Mvfc2zUmRkTG`{1a3kJtMh)X@L)2(r791G~$>M-zO?zK7J z$Q>snNZb!NH`u=*4Ztax+BqIAddc{}Ut8y)ZiqJG+uP2BrOVxgmV69+12xnUFK6G6 z7dmwn9LTigdi-5syoM{;vbZtsaL6l&h`O`Zc}uIx;-LX82K=6jzWedzv!Ihb8vWJ$ zwsV0h&)z&A@KR?4L+?zw(aqY!zCo}0TXN?Y@{*ZB#|zNc_XA=@4@MRYJwHr5d(`}y zHut*{VPGob5n6SgN=jh(6l}Wm&+*dnO zJ{Vgoy!uAFCwO*U^;~BQ@9W%`5~O)}4)AY4p+7AOiQ)$+?=Tx@Hxqt}OnRRt@=-sR zgfI4-8(&8A8#$rz5HJlKS&(%Fr{N( z-t0}S*!%7OURyiPqX8-_d&6#OI<=B>?bxGq!pdo9GmoFBzFgdVPsFppN2#>-7)AG zET{HCjgE>8Ag7ms$wN<}iyUn;7AB+pOniyAC@wRajVE-7|3aYaA=QCQ%r+zhLf+>6VBbOzP-e zc-{8>&kdykM`LM*n{j&wI|!H|#qsE!;~$5Xh*67P^R6!r-oA@N7Ev2CSQ|Fao7Yv+O4K5WIXN-pE4D* z;mUVH_wV1gDAc27U}EYJ-^474_<}hG=M1ot4V)pF1C?Cq!w#pjym6O}zN~W%S3E9z z)3R&Nr3{zni^R`=%g0zKuu9tlUm-SGFHmSYK!Fn>kw4!!$cK`PT3T&BP&} zhwkyR2v>sdI@dBin(rWUbv}F(?->lEX|m_>z@X=LikjX!|GW!Cj0m>Q8CIbcgyZee zeh`+f+cOSMu)8>dx$I3UeJKtfAJ>|!vkng_zjb>)CboQUeVKz5p;O z`m;hJa)8J*is_$iW|@d~)*PIB0b1eF&mNiw4+8tlmXaCH(LU15duUVonsal5vhnds zX|hC!gW8*>?ZK4_J_kEZ=5S>bc?XsY<|-D>P8pZT;0An$^X=YP^zoAPw%EOTnRi#3 zbZOu`ZvfvY1i#+B@)*^-)Me$CfwI@OUs6@&?0$mFD`Yg2flJp5x^lhC59E{vNx%rR z+zXK@Vvy&$UWe(kuCho0;{>2JN&j^Asl1GbBGF|_XyzUm_B78t^JcTrSdk(av6*N7 zUd9m5*3jgju>}ILesOF?h?mp%_CV3$?x`~=7{&lhu%pjuBbbfUgF;*L%$L4+C$8E5 zh=$8szLlVUD%cYd`aJiA29z<&K@g9?I%X<76kqE@x$a*BX}1;YKB_~rYJW|vXC4x0 zK%sfx(;|pL@74!D{89oVN;W4b2o;mn>>tVFdqbfwfW^*iWLh4L+|z(&mHnEas8=1r zCDm9`03&|onP%R6=G{W9gE9A+xVMyL}Z5GB}7@>87g zpBu&O*uA-wD|o1*0LuT1v$6pOeaN<_G`zf3+{k>7K+?mpE0PwOEJjj26*0DDI=Co9 zNG~Zaj%_26LRP?rDfr9?Ek_F$+CxYcllVhK%Gd6ZlD5sa1ZdYdFaa-QMEmJuN&g8) zGgPh=CdB_H{^7K3S~;2$nzf>!qQbJ}HhOF1=X^7vbCzJdSmM2O&@)9v!Y17#1(2D9 zcvxVQZuc8aJ(^5P2Vq#&KvTXA{M^v9s`9;KtuGIO(K5rCeEVI3%gU6)% zo|RzoiVg&_mOpr-ylOZ=Hk_gbpIY*}^A~`zPj;qiHgb~f>SjPzXgh}THKZB(?4ZD) zDJ`wRLnrTzfdLe{Ike1xyr@4KQm8*`4a+K)a5OYqY!AuG&bA*La~;fg<$B1aKmAF9 z3{mxM0)O>rWB7}tw?}-HT0(@eW9KUKCIVjZM#<;595gFi)i4yUm33W)@&GOvBW`Fw z+aW;14VU47aLYwdj6A`H!vAE;;F@)x3{)9Z_&!L2sHZ;!CuSI0ZfxB{d@hv1U9E}4 z++QSZ_2nEDg=X!*!2a%>nN0)wePUbQ$5nUrg5ecPz|{&PF_NAFQDE2V;vvDs-IMU2 zb>0mbKfpQgKe;b$8`Z9~MMu)Hq{gO4nj-9$wchWZ@aN-i))YuXC##rmBUM$4^xmOJ z+4Aw%zJoJ22`g$pmXy`LC~tIz!}&c7`@Ia!gr6u47w~c%5rk~2xaQND#FMOgmAF-B zmlTvu4-C)+va!o#Nh(#5lzV6eO`>tI+B?oW1{GAFj|U|c!9P?o@ytFrX^XHEwS7Od z<4rbVFvNrJ(b3xsy93Zn!@r?+`0Kg$7%6Rj6eiM?b}68vZs2@E+?gZyuUn8wdHZ^5 zec;!5Jb5iK7!l1(g#4AfDzGz5_ycw{rh3V_r4tO7H;wR!6L+eOHlkSYE1-+R;q&V& z8F7z88~+BNWpkL3LD9EarI|2gL|=oNe|nt@sI@(`mtDkIqU9%6$T94wSr>zLunOYv z;;%nUSM^*OWcnj{aW`Hj~3ZGg)!y;4zWnoqtZ(0#?dRon6Id%#}( z6>;^92etRb3C?_eapN}tpwLH%^s@QVTZ)O?{=VoX`ug)rAsh?q;@wHh;*}5s@s`dA z>Mwle#L0rz#-nZJT4%k1y3QkSOsx71M+>yACM#I$6)h~-EQiN<&5#tcUMQuv1zIf) zr_;S3yBBfg*aDoR=jj`5v;Q8!371kDNx-l#RHpQ+QrL5qAQJli(t`Iiy`n(BoGh=R(#5X? zh@gow)4L%0tF6p^-pWeN>f@zC&^5RCTwUNq$Hlc*SxG@>l^NakeM{o9WHEuhHfxrr!6F`mq1V*w}a+ zv*D8Fa{)6ONb7UlNq@hdE!~FtGpeuW;UPL8jv@>U3=~Hp`9SRd#upr}|21C>3G%-( zEYd1nET|$8@}cm#s&2w^pgk5^13|hj=cWQxn$_DArskCq6g(eE1ie(3&;VP532?_7 zy~TuPoJfH##V>;1#^fYrBAi|-?RaZ!xLi|3q0+*G15&7wiM!e{ROh;f(%H>U&|mBz z*Jt$J`Erwwltr15gCnA@u`x`)!L!uuU=eRK8(#5{LzEkPJlNE4S+g;m%jbP@#Acnz zN!_s;-bXaZ0fuEe!Lk4j`KRLiyNcDqBuUBz0EnG?vh`9)iD=G31==5Vqnz@0Y6MgV z&pIXypeAq*s8+hZLXpUx{Ma$0IgWdVNk7YGl93!>EC%GmoT4t=t+W&fdBTnIz>79g zvHbd`gHna$?<^4OV8NbuiN75YWYLfa75|AFOaKfB000;Ud}w`5q7cC^L#2|5Z)T0p zv1ws&x?Ah9CN_3l2^9#;790Tn6-Hr%+1tY=93CF#?8?UGaR6`qfPX^m5D@Wv=KVCr z?~ONRa$QqV%4yQTSjxSurnbx|$zOm|v{{gRqDlp{Ey$_8 z`o5UlglOO+NJZk9Y(Vmq-L~QC;fCcf58)ETYZ8@<$d*S9nlK=*E>B})Vs12#m%iUh z8C!9%A661VVEVr(oC1QRYke>ihr+Rg;$&w=(|ks+&V^@p(|+O9rHHad6)U?#yai4OTTF}a{Cx%HlRhgJhyjy^@*a)k6 zNqsh)CKd<;K5XKDel)DY=Xqk4W{IVd=AzZvLo4UT{`vEomzNi$RcpnHTJ2}x<-K1# z);naXuvJh8R0trGz+kX{*OJl6_5_HLkl1dFq+nSR zj+~w(p`9=)cZ{Alm=WqSr-?<99T?B3Nr6a{`zn= ziMF=3)oeYb-}?Foz~gNHCKHy(YkKEdAu4FxN>I>hyg7zR0kBtT#NDDTne{dH93VrY zm7&f2gaN=eh-pRJ%ghrHpFhh&p}2HW!9ZUVyjHhzS#38LwYx;#bav}mDk|vTlG}8- z8*$9Z0x1MwFGp(LHad1lI(g~w<;mX7ubRdB_0^aLssu_YA1^maKfnMV6Se)038&;s z*KG$EJ{en3gzJ{ACM!JI@cD2GdXlJOO{9x zG|W%!8DA)SEsn;D3LVqVb`K){B#*KP2*d-)XZy!_bIlo(w7531?ti;B{Lpy#bgFE9 zZN%XN{dGh2FU$Okq*Y5MLIS%J#5BUq83Dn+o5v9JUKdsgcD z`aaK{k5UbEeVWo)(!F9rNSPh3eDwz+gr>XA)4d<273J?2z+yK0#JK>x`r>v$gq5Z0Qbh4p2FOD2dXuc{MvW& z#q_4zi>8{GnK=wdoR+ww%&e*e#cV{)t$Ddo4yg69VtRnLQu;+AU`bBvzx@je*zt&{ z$kK|xmiT>Zg)A;D@epR-_M8@XS7-q6+v8-rCr!eW;QII>{;P)UvztDE z-z{rmVp6#C*pv4ZaP{Ef;f!2TQGj|Bb={o)lwNY|wiF@cwpCaS)B}i+g4<8iz&rlg zqkF_iS}_-H+g)*B%T&KOK_-lx2f$%{pAA!hQ{-O1CX!pgzHBq~bfx6~D-5pD2HUHv{{cb==H zD4;m+QInrCt=NK-=m3@WiQ;xh?@FFwE^s&iZ|nLjz%@7lJGFzkw&^-k-jej7nObLt zEv<+4_V$3MGhA#d1q2Di6M>n~Nd|nIA%;@9_$tiRrKY>o)`B)WdgVn??Is(qpgFhY zD7&EbWV?onL`OOX%@Pw6v+pKee==#AB@x$oxRwwb7Y8*nV+L@%Czx8w3K{i>ani(4 zl(xmLpnk5fpn@>BEu@VO{p#=#wSRd9{Rsi?&N{D1@Ldi}T}w+I$P0WDI^0K>uLS|y z5>#P3mj>h=8b^vL?f&B8qJ_1T^X6+eoz+>zTD)50@(FlY7y}nq@hWk*$i{4gSTG4K zF}Ca0{+78MVJVrfwEb8*88={vnwAE9x+9?5PsuA zH-e$Pv%|tkTj}M?+cwq72nJaopeJmci(y=iU*C<{fB>snP3P?^;NP4HcXQjc&Bgru zpT9OCGw?+T(26;?^Y`r!NOK~stLHiagw;A|y`#%XZm^4qsh;ym#;5n-7FPk@F<|+; z2O5q4aD7Zb|AxNO{~}FLt2q}RBJz~*%z}w&pKx-n?q{?CaVripa&ksWHe9Oe>e8ff zK_DMBa+SejlFI(tN#7c7*vR=_66m zq$0iA`;-rEGgAaT56S(s7-Nh_NCCo~x;}+)eOK&HvXGji?F}}PfVJ~su2F(1jW1&q zu>2=ws&9T|aEj^*n6UwlUm()c4a_h7aBgz*9Jq0k{Nib1iSb}1yv`}GX}fNLM#c(m>$5Zj@YDD)mzivB*u(Z_B7LQ8$N4rtsOo0 zbI#urD}c?tPnY!GoMxFQm6p5j$vDJWOPlL>l>S;;{fS^WV6=aIW<{`uqD@0eYOfsu zInQ>9kVzs*IYt#gZf(D*V!iNr_wcG-=QE%NFX%|0lIN7ti?NZ*N)><3 zR=cSow|UKefP3_B-o`&FF(QY>TF$-uh|#R7cjTfVLG%WfAtn&z?(xdQ<09}#0h*;9 z0ys`|xc!QrxSrW8R$`z=N0fwNqMMbVPt)qLBU{nst5A7MH4%0kW^b(iG-f^(tI3{9 zJsk|It-WXG((-Vo0p`I98ER(>HeJtoa^iB3*v|?4JnJAp?H|10ZlNO|gz7y2!$e2g zcq>RyuOsmd(pbdPZ_algK)4_MqW|!*C=|}0n$*gBBq`P(h>T0D9H$L`1k9E7v8 zBibtuos6t)y+8jtEjWd=1&8T%O0YXGuy3qEcX&tKT$2n83*5ZZ`&$w@{ZU9#6QE3yw|d;=_lQ2K2RMsx!0P0)$aL$Y{8?Aoob3=jM_SUK>&B3&iTjYHuTG;e{$ z8)b=pY}v|)bW zNR{x=ul#+XEr!`%eBYh2qr_VEdCc85DRXYiW(WO>e|kV>si6-X!!qm-d`)#bDB0py zZJq!PB_(B6mS6rUa-N@0IDwM5Bb2OA97)&@SAzv+U)ynft1c5y9eDZUKIOG3v=Rlu zQYfXUR6PtufNu(e7#J7=$hhCf&=HagN&DWCD{SGg@5i-?57=3;TOLP*9X^(UQhgk@ zU(NcuDe|!Yr|N2|`^yE)Tr>h<^je?TFD@=FkA*e_USXe6f_sKtyEniQ1mTYYPQrm+ M$|ysNUKoD-AB0!Tr2qf` literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/addquadrangle.png b/doc/salome/gui/SMESH/images/addquadrangle.png new file mode 100755 index 0000000000000000000000000000000000000000..2bbddf158ff05894830e19d723f3946cd9513994 GIT binary patch literal 10712 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/addtetrahedron.png b/doc/salome/gui/SMESH/images/addtetrahedron.png new file mode 100755 index 0000000000000000000000000000000000000000..0a415707a167d1425c7db75dd4065b8691e3209f GIT binary patch literal 9683 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/aqt.png b/doc/salome/gui/SMESH/images/aqt.png new file mode 100755 index 0000000000000000000000000000000000000000..32e36bd0e5dcc708eda4e4c55f810fc9e82fe23b GIT binary patch literal 15347 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 DBTa5H literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/automaticlength.png b/doc/salome/gui/SMESH/images/automaticlength.png new file mode 100755 index 0000000000000000000000000000000000000000..d96ffc82dd381434faaea8bea03269feaa19a997 GIT binary patch literal 10040 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 literal 0 HcmV?d00001 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 index 0000000000000000000000000000000000000000..f64077c9047562f2937d88a62330922bb7269678 GIT binary patch literal 7198 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 ZG~U|5mQ@RsS#Vm+r9{|9#6ciI2| literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/b-mberofsegments.png b/doc/salome/gui/SMESH/images/b-mberofsegments.png new file mode 100755 index 0000000000000000000000000000000000000000..27f68685e5ad72bd23c389e7935b803ad633a172 GIT binary patch literal 25752 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 z zff;a~b+-->#blJUEo3wvXVLH_?1Y{lliFFoeJ+@}>Nq%~Q?`vG;SmK$3rDUVUF1OW z(uksGFVc9KoY@COeERwLl!~(`If{(QMWrKhcNb~NS@vWzV&tN1)a560-nga#S;J-R zcum=KRgT2nH1voS!&|yHP%+-zO*U3SeT{WbClN+PKFKg-Ky$%)g+1(jvKhKbA<^%i zEqv5Dj7hy_GR!$$&_dtsH4_f&CmG8(4-CE%*L)DaOULyR=OXypKw`v_lBlgAh*_5D zm*bOFqZ}KdKxaQFN)EVJih5(h1`p$4#+902)FnlE#N!7WvpqL9F@v)p3gvxv&B+!d zN0~OI0+0DvH!g>LeX+T*U5l{c|+uYlXIi>FI~ReMSJnSZHF zw>M=EP3*(Rl@6{U4s7y?B`O<=ESj5!v3nbKPWrZL@Z8dJY|Q?F!r2#R^0UArVTHth3V7vSHlu7rK|mV7nw?>ZK%d4Y7~8rq;tB|qZIoik1~gZS@sSW>~6UmhaXD5dRty}OYk|;bWTf{|gaY`s`eaq9FQd zc!-!mHw&C{|4Cx4pKQ%1=vR=udDDqCWgGq;DjYuVVIShKAWsj!iPA3t(~SiIQSd3I zA6X|NtVdO%79KyP1PI#JB+gA5@6ad-(t4`J?>$@br?<^K#VhrpyK1{EOkigU&<@qY z--q67AvR-&j=I4&BC!6TcRx9G#*kj$mGoYoZm@?B;An1o7Kt9aMnT)FLs7^cMifPP zGWI*95&T$pvq3f{_IV{5Y*T}{`zb1s|H1N!YUqTv{`xUda6JR)BA31LIAD%1I!!|e zz)$~paCkgOG^n$?#O6I1tc9*l{xxpAN$K@>7hvw#vBWaaKRVi*VpUO`5`pj(q!lz5 z>3O?K(44&OQus3Oh|F=LBw zU`>7ZFkj1(E}19>9^s*IXG9h}Mdfcmz!1D87lo*+3+>FXC4zt*Xr~w;dIsQzYVgmy z4W)h&p$#Qo^u^QM95cB3Z|kM9!OqCTjIKY=o5s0kZ`%xeqkZw=W{ajj%iDqXOeiPy zavZ{TD~h1+8pt0CHz_Wd1_{fS{uWK&!^i>^>fze#Xen}++0UE9IHh)6kSw?ryao+4 z6()nKJw59lXy+9d;)q=a@>4Fg(OmubjmGl}`T(0sE`&DdVs7&O1UU2il$v1XrR5ae zUPE)*MsmfxfW%I=c2LR?z&9S8U-n0kPBP019(qbboxSe-iEVzEuq49KDHge4HbS$KoU;ck0gysxfb@Ptn$MXp1

csg)slm%fu9|VY78EG4?O5-jMG%CExG{ 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 z zP-3c^PvlA|eHlX#RDm82_Kk}}(zD$0h~sUZeTbN9&6tW<+9wzJUw%z*ZTi z5G6(yEvJvMoFePWQBwRRdv2_x3O^4RAL9hM{`cib{Q)b)AB8s!BxZdz@^g|ydsWlA zU65ToslJ>h;`i~O>m*;V&$nk3&#ngwjQ#M8D^YywEVW$UnZNt58a#e(%G;tqm#&!i zQB4*ra&9&WuGZ*lA0F&ZBzTw@H8~SeL1ISr>?C$@6No39=v3|eIcVmj9l1Vi)KGF$ zYnykv;j2u^L(_FfdUS0~;ZakXh&W~4p zUpWnPU+101`>Sro_&Y3mkw&N*Q z+#uh`6Hh9IE;R?jRo1=q`418+!9LU-n);DtK%^{^q2e<&Rt7#OYV@ro1=YAKkhz(U zLQa$^ONnto8KGLB+y`>S$6YN;Lv&IY>gXID~IF|JRP?494h?p>aRcjLePPajU{R$`PGnMyHc z+eWve-ZkX}*f917ip|1R(DDfwlWjq^M?W2T>9GB@_;Tw|ieWp4MMMn2aQ_)4Wu2!@R`CmMRR`>t_ literal 0 HcmV?d00001 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 index 0000000000000000000000000000000000000000..6abd3c18420087eb419606e2fc8664838a78ad58 GIT binary patch literal 27924 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/buildcompound.png b/doc/salome/gui/SMESH/images/buildcompound.png new file mode 100755 index 0000000000000000000000000000000000000000..79a6073f2976063b2faba4b60743127f94f086a1 GIT binary patch literal 18585 zcmbWf1zc2ZyYD}MfC`A92uQbpv~(&hCEZ=pFm#JbNq2)vNtbjCf-p2lH`3D0(ERUt zp7)&nzWd$hfA&6pJ}zLGHEXSV-S>6%402{ z%D?fJRa=!mA|xdeme*GKVxmV%p+u&m1mDgAs<*`)n#(=?^`l%J)!i;_KmUi)k+#9t zpUdE`p8D&vS(kqPA_(7)gb3*F3}septC%1)HMP3g`ap)%yiHUSVL(8@X+g!FN$F}J zonYfWU4+R(qU@J@$qrwY@iJrzCc`eOB(iRCUS|1se~;)H)a%9CO0YfaZ9i>#!%4{- zjuDCzK8Y<53vqYPgcoUH!=>Am7$mp~0)hOL$x7<-tnS?}+#Q}Tio8I`) zU?=pdm=E3M##Lz*)56^q-Z6G3oo*+;wYbLz`cs>JYM(__c;pzi^yP*#!v>62YW~Q_ zhJ?&;rQsBh&l*nBw@c0GOpTT%gytLnXis(wg+#Hb3 z9d$EP*gYFzGwf_1Y5yQc%pd879vdRluhMI~o`;e0;#-CSi}P-zi;a!V+S6>=s^^Er$&y|WA&>6C4`r)re{gPf2gm!Z*@^iKNvwuHT3aLaJ!z>` zK8zl|d(scBD+nN{>i&>UinTtN(QaL(Tx+l2XTkL(EYNv<0A;AyimR#FW~41$A+kfU z$CFD#_nIts{)Ed}?R4G$V=Ib4s;$Vc*iTdVq#I{d_}a%h)$2G!5F(2PM*u3LPBh?KL_G|x3w_h@rE+8 zM1)xpT8$MF)Xom4PFLHQa;B7Pv6z`#99|uQW!0<%afdQo*jRIHrSy5C)N3# zp<r@sqf? zHfGORr@vc$$j@hRYb0x&dk_>*5c)%bmpk8TB#)MkPPtKoZ1l`hJp0aJdo!G?J*R9P{ z4m0qW^`S`7CccV2#IuCmrW;1)nQ*4?#ih%%2f6ZFeP>ucBzWC!#z{1tFFd#VRxz?8 zXw2HOBglczZRu6P=Hs;%Z=HiIw%A^M1|{>z>cV25deQ96DV4eQhcPM**$QN-yr-Sk zRgMR3lJ@nhPjqVS6(+t_cd#M`!XKo|h`fxWS9t3g7rMgrL^0QbK(|pLjb|3x%QCs+ zwo6(bdrg7ulnT3@RM__Qe@0A9Oe*S>-Wfqcs7>N%79qUwAR1Fl%EI1=h-eZ=Flf#b zccZ8;Gjbv?orjd~>QNSjUPp#I>1TBkL0Ecom%qDz2QPe>T}P=^t(HL4D|x@~fO^YT zwb(6;d1l<$@oeXXl~!7dvMK+;oc-=uKUuL(OEmnZAvmc2`nCF&j%n~*$5O7tuLe_@ z`c1VCt)k&VO=_YS#^SEH;u5dFtSVF&=r{6M4(6&fy4mS`fBPeWnP2h9!y~y|D;@DB zmDfQL3gxsS9C`EfMF z;T~yANrTxHFk8qkNx-aj)?CX8?Q>C4%KDwz_?`JqgTo;{&>#_Ji)Oyq*E^Rw&!`!3WzIM5X$cNs>xl zFQ)qEtL(}xG-uhW))Y3&E#clSo5J9(*9W)>H9qlcrjI+>vWs}qbY^MbZFB|b2AGgbk1%_{6yJYe{7jz;shpfDFK3JlDjbR1;zLD-#!3UE=f}WcN`DdF$ zx5@l$nPemet~xdL%erLC-wY?Jh6HMF+>+%?uY0rIkCv_!ial-UUm_OZ3zj176gQQ@ zUJ4Fqzw6UuHic?$6$a~RLj?)&w-Sh(3rzbj`4t58M7 z@d|ttNG84{TC!M=6(*3NYLz>-u&MlX6jy>yRTW4LKX+q(NqBpZxwSQLugM}&F7Ao|lU_)-M z_xz926l*IGqFZFW+IDU&b7N7$%?(Fg{u1fAw>=tJC+S!I zM@g~Q?f!YAX{NAY22+Kild0YEOmuZ`-ttjeFrR5loFduu(avtiES>=7yDYzp&;fU$ zd#wTb6u;^hY$6+OZxAr6k!7~@@_EVpNU}5gLC)zjDMDRbO6JQ=|Kz3vpQC5&s!~a)M`1Gk(WczWAbePRdc`LCh4vLcw}l0Drc@=peZz~W z+@5XsaN8U^K>ZC(Bx|>a+w!RP_J%QAY2LrOS}*hEV2%Sj6ekvGa~yB5u@f6rwNvC# zEX}33LyUORr*bzKH=OvaWd|X z^*!6T_1IX|`by}BS)KZ;MZuKXt9CVz(BQLu*zA!uxT||gIUJNtm=%9>#5ksqD<#sm&)rCxdgUT@6szY*Im|iXro(!R6N(OPyZZXM1&*r8ViL z%WyJ31%9_BYHce~K^BLjw|alJE_WNF;;LtyHG|i#_MLa33k-(OYYZ|3T;F;+`$|VN zZGe23?S_@_y0^Lzv%D5LJJq5ca4wl+ads}xQ(I&GsoQJ`tlWBU4p@*>h7M1uUWEy! zkWe2H2AF!}Bt^RLpH^uR)78!FedM%RJxu#YSui&Xi#*kx;2XDxaVUEO4Uf=>2z*1N zEqvNVEf+$`1U1rd*vfPy$AhjWT-NCoTf{2)cZqCZUg!oDHNM`0GcCT<2!#?uhBdW5 zw(sXf_$ln)sJ5P9Q}ya#hII@q|FYpbx`w?S;hg1IFfsQOG z^;+Q=qXoKI43@>8HH0bhMLu~6TaP~T8_DIxA>m$P8!T(Bvd79yYpm+>O1n7`&ho$E z_l|rcu~Wproe#S)G+7^5R!PKMARlCM@xycSU$}7zT{!n1{^n$=qL@i5$c*LS-~b^{ zO;lTfYHMpJ%hRVW%)Z}d=4m;3PkgMo@ zB0KS`2K*N~>Vd3O^!A|^X zulH>0ZDwpWTCPuZQ+aHp1~Y}jiuIEdwR`7yqwURZy$~<$?WW$KP*Har?z0~x1vhf8 zAz-Ul=g!+RwNX0N*1sBDZQx0oM=Sbth@BV*juf2t?>|&b3#C*$vTflGeectW ztasfSA2dAtqjET_VxCxb8x$VbXf-78y&;&I+P=@eHtw+3+#XhqM`qucLa&hOxVz0i zkRiHWcVMNc_#h=EC0)cf^$~;O(C3$EUZ>l#A1-jt_v7}os#bOL!@e9&+PW#`8FZGp z(g=L-ExGPZG30Yz!+sKm-p*dG^<1yTCuJmG>1a7hR0a0Z*Xv|c-DIcjML8`~^lU<# zjD(((2uqqN!*E@$r0?{C8&?a9FN%zu91Syb7_(++bV5QPP`7q7HMzRA_Q}H56|9TT z9Eyd+HqYO?D?66@{!(sKFG>V6Z+LjPtFMn1?ADvaX3CRRzf&_)x1Q_O{=!L6Rc{61F_cr~oVD-(6wR6KEK_@l`z4h`fmj^LEiJvUUn^Mq#NkvVK`V9Gku!o-D zV(>?Jp(!aS0YB8AHYSoo)|%X5^PNO5q&WBo8RBqV;OdMb`YhW?Qod;}aqf@uN#?ERp-y~{Vf zI3z@dpq|IOG*g_Zy@VY6wr6vC`}`z2<6uiM?iDy#q14TGMT~pbfZ5f>J7=<*M|d%X zF{0k37_r(fX+iDF?0>ov?T-uInR8zsoCSn_c_Orj4iB$@dcs1zPw@X~7<@P2^_v#5KmL1bwqhcJ>x&m)VA(+#<| zZ=W^qZS_0*`#wnP*EoF7Edzf*R^)vb+=RC3sb!RCCm)4e_w?xK)-_c7dGSA zMPogM>P6)`CCTy)Gj$Aw2kL779F ztg%ZQY2wPtk_9K~+ja@cKqqNkS>Kf;eZwO1+-O zWA~IMD9Y%kIE~izy!F@YZ0!~weuzdl<~rk$Bu%g!S%n?yx6CuO$cIV4*pd#3_>Ji#$IJk<$x|s(mkatksURgH>00lZ9SflcEWC_T}dzNOzkKFsmy6icSDU7v3j-gv&g3iy+54m%E zm(ovM2(mR%0*5vFr(8luwPBgND05^ZVO!bey@|B+^lPjX6j5W=t_5Y_^^A+EEe>*O zYI7B1ZyCCKShzG?%yBWe5kF0;qn+u3L6U-J4isxwC9@l&h7q#m8C-ik*DC)ke+_0* zB)Q;gt+zx$#^u{3=8-i^7s=#Y83)UqBjv{8ASUl09zqLXDO{GEYZV;N^=slYg}ob^ z(nCV{xKPp1c9!8$@WH{T=F3wq&tVA_#k@K_qot3b1W?YRuV>Xq%YQ1e$Aq!*Vo0R4 zp{*0}q|s3|2!73;(G5wN<{XtE9$w6no_jz}GYwu$>P7<=Em&76kHKnNdh$QrmiCGr zo*Z;cz-zl|M5C^q38G{qBwj=3&{ZZ_^{1}dcp;>>2X!Myp*j~eW=B{H<#sbXidh2s zYWKh~G1O0ma@xQY{Izj?g?`klJ~#oNz>}(-g zK^>2>pAWxLD;1HH$T3lqqg+M*B~9V0_SRebJ)=JnN=|NW1$6bbimIyTPW1$-@tx?n zxb~v5mQTUK!KktlKNZwGDHXu+@FXTgcEOx{$0_^=xnC0^X%6C(c*^q>J0G)p76swZM$)mF~;ZNhqkctVlkps_tW7Nl@mH@>V*8)Xp9bf&-{sq zgBB;bP}zy;ZQV#jSbSa=YpM_hzVIrZT*bnY1lLPG=9Qp-L)mjXO|XhX^Ueato>e^y z#5hmu74wCTK;^dcT-HFm*4(}@0{-WCc#Of;I5}6reR{$^8sLL?$d{qFC(R@cLS-Q# zYNbrgJ*<0B`*wCx6c@XPQ`c_mUv0ewk@u&s zS}!8Hn5T%wA|c z07eVr&HQm}%ZK=s6j?6|0k^OWDV(PSf(}+}i4XB&HkDbtWjq6%cXH=S{fNhBW=P%v z@}&y%^G)Tk(^+Za(f#GE&+@buS|AEW!Dq~it#NoZf(jPt?&gwCgDN8s|1$$tA4j0- z_9WT;=IZ?UiB8X@DuVFs<-ye==Ls7%H9?sUT7gih@Z(y~Ws4xuQC#rPmWRa3%E~CX zHVGENf_3wlOkPR~BjPD{n?^f0c5#Umy>(H1`o7AF^NEbF;Z5f~n~BohFP}nWs7lksQ2&h9s~+q;UH~9%EMIEA;H88_ zspx&MQk<~<-?ju$wni%PATjjU8)ATu8`c zwcWHL#dP+H$u?Y3ZHDA3#B@=XUxt}KVZz;^_j;5{cbKcrI;&<%}q-#@_S#%;I^A&nn zSx;=|D^qfEXfbd|CBR#h>^wh#pXe2nWwf-kLbq0W+#cZ-$b!4p<6E_J-;-R$De7|< z$>%X^x)(3vzlT{NRWHr~3F*=Hl@Eh-6uE2Dpv<6S(*ta5vz~ZH37k(~4R8GjIQ0HC z&q?b7E%At6{`dA&RkCm&>Fq|{2vk{F8RD`#OPton$s(U5t+ExR=sN0zw*3tFp1RfW^CR8w;^*7I7AZj;mPDRGdSizbRK z`ct_ffPVsVWl~{Oq4k zRsE32CtZdiQ$aBO)mhe~rEaZW~%an;mo?waFc7at!Vh*mX}z^$=at#_T#J_BgN&(@dZ z!;_*>u6l{WmII_Mleg$pKdA1^lXMk18@l!(R^l1%-Fskcv?7+LkcQEEoV*cE!J8?v z=zF%?xCe42)AuMKVs`g@{R=v|S-hTp$i^69Xu{1OOlPfhlLZ$5f@#-XZ0zq*6r$v! zqN1m}GlMI#k7W5%mY@NlkLWeJx%O7<&)aW@V%E+!B;=PP zrivp1Zhy4K+QA`tRaXPdc+$={i^|Rpd)bN_wp7Bx!j?0=cfZIbvCcZd$%JmsmUI13 zOB!uPzbRMj%+JpsZ;ZgLbZ&31!+c&eGH;F*X%?PmfBjl_eLAx-ThE1vb4FyY zbGF_YDR0FPkQ%$0wPapy?gZq1q>tr2wD>S_$)At$@jA@+$+0#6Ok~lOk(Z}sWDITG zZNLiaP^lp(`vRPqBv$>U{477z-#COxgMh^x>E{n7Kt*eLI^3l_3Z7nt` zbHhn^BWI@PJJ(p!v`@!5^P|HeBQ0jnoVL$wF^>$g;G>rLiPqt4uq)28=F_MBX}p+F ze~u`y6DW;Q_D7UNo%Wg$!}ZRVKx2`?%BkFOjRw;BK?UwOV^@n@SOy-8=%}cuZ)a*) zfYgSjBG~-TvGf~U7Qr-J3#RaM{GKo>?RSoF0fP_kOW`^|Ao4*iYCGRF_3N}9SJV;Q zgOO?*&3rrE^k3Q1M+1U;kp0sc2QIJUxA~`BmIFgDe}5p6uvgfvTYi9i zC5l{_bi~l-K(fJo&%nqhFf=^;r!5bfBRJ#3qe0Qe7xs7s+J$t{^7N1V(@uHU`cggs zooX$osA%yg`pca;ik~^%aeUCTO>%JKB_t(LhQM`#6pAY$^4r7z;@Aq_Bq+Mj4L(W< z6e%DcEVTt<eGCWpt5jd`bZ=o0C76iZS& z)javd131NcYXF+dpP>LyRp4*ofRDlzIfI0Cw1M{#bC`Toyzsh-CF*Y`KveG=v)CXWglZ6&v^iIuKO#{zBOmdIbRe`r_W6lA9Y(hJYLNdx|{0kgzb>UUO3usXxDA?_aUB6PmI0 zY+xWm5LAFT5HL&4Hb;xRje?B%{H)x!#&JM|-t)iphF`|VKhD?jJTlPDuM_!XN`%oK zgoF0k8?meC{aDa_*X(3-EHV|0DpQ3)v)9R=u_D4jp(AWzuj9`zKVT?=;>*EZ;Jeqx zFdcmB_irO|-(zK|aH7RC)30?01nbR+dDF2%_3hdEkz6E{EEw-?$_09C!WUO&m*qy9m z>^&PV)$c{l6Od&=R$)e5goIocjEij!=VIO5-00OqJ2>ogj$dF%#xPF zJFoREhFu#z#3z0AyE&jq05PV*a(g_YbhHwu1g--HsSi$h!e+2dw6*7l5Cn(7Y6Xj^ z9x?CT`$Dl**%BP-4hDum9^r)a)_BPj%pYcYZiDOlgpQqks6bQ`4F<*<AC5@xOWj1{ZElc}1>|RY3?)&wEO} zbW?a0J@?C0I%A$qr>Se>y4<*(G}sve0&hKalJMb94D|x9?PN5aTvEJeI>0Y*-qmg2VzT942?9W`>x*87jIhuXXqJ?nzCI3%Oe-aOroGg7w3tk z3lAXEh(&z(B1m}iz&W#GB0#Ou19EE$uLC()My1h3t80T{ z*5P$EzuE@bzw3nAx!YL#55|gH1Z4w=(kFSrcf&x0F@#TXx*g=Cm8Q?g(F9*d7 zEp{v2M*%-Z9qI8J$fu8bDNz`ODholJb?iMbeHgQuE$(*y$EpJ8W@&Gkb3I%_i;$2} zwQ2GHZVLT7&Ay>B3@76>laY)E)hdZrJ(_Io4EXNTn_aQt9XBM+`t$!Nm2q;SL~n=; zDGVdYg>@3>LsHVg8O&5?Q>t+{;%l(s*Gv9sdCn7doNujsj%gnO)KX=TTq^ zMCb}0Ow8qm4T3Bsh0i|9)YKGfM92TmrpPG&5)BiNgrrwhHh-zl?E099&-Mix2C$@`AvJY=FwcQBd56cQ31ZU*i_q!=gmhmerF zaL&uq9n)V+k`QcCzUYEMMOQ1*AmfJw1n6R*ou*>SR_NjRyX9+;2gr_guYB@H>WjmV zvGWB0orAdSOed)3D-ui_f`S2L87k{HkFPHf&his9{1PitD$0XDi=xHeFHwj)Ew-V% z?ap>Dwg&^BuxRX)F_C;!N~AFnATIwNeRD(ON)Lm@y&C!JG=eEvHhOCNVH ztsetPBL72n>*qNER9nh)FXv=yT##%SH6$eD*`akK&`XtX7pcJ<<&Sp>5pdn)o6dvF zTV8?QntOZg?hC$}MuR=-{}!UvlM=D8u$FJ;5or7WBEdEOKF)nXGtG3|Ws&FXJ4#X4 z-3J$cIM(;*s+&t#bVcU@a>3NCv0Vfa4f;JWC`h0bigvbTc&lTUL9;;4c<2iqIm_&Of274V+>lz4cA&!U-9%Ay`^%3)4Ia5cqu^O@W>wlK=2dAg3&ix>(C0O5}pkWMEn)gCa7^zkM zst#laWf=JRiQfV3F_0x1m6W8Zj+?7O@I)%X>1@E3#~H{8zl#k9h+;b5kEtrlA{TGP z)EA*>m=E;av%Z9=m00te@tU079WT}XE7=l@nAE9yTU#?_OGQ%iJxks%cYHuD^yjTE zV8{TkD*&{BMvcLjH|TFFa(#Ki@Yx#z7WrzSx`AY%vN^G^*NeTTqX!TN*fkFjif-1T zz}C6GMC1by?y@x=0d)89uhX?O2PmA(9jQLOj{hts-zuJxyd?Z5yQ ze&I0RggPN3VJ|TTO_*zai3aM9ACFWsk$g6d$6;x&>UQ^S)ZgMBr~>HOzHz44A!ChS z6T!Qrn*;ntx4o~**;0CSjwleYnxo2ab!+SwfxwjaG`SCAsW~`jI&jW+M)num@7=vi zDIkyv@K2@XAbFl*#^&2BAx};v(d!pKe*6G!Q5-;>1I3El3JR?Ah1(lxpyT-5cS)lg zg>|c~J6e1%CuOe(sO!L)W}0~D?SHDFXLJq}FZmrd=i5Yg-7M?em( zC1@HrP4fUhsh?$UlpQ44OwS8qFn#5KhToa4UY_%B!D@|D&0P7rCkKRCjofNIWin&6 z*z==xF1Ky1dCzsS%Bm`>g%)8FUi&-0!MLsdvyO5AoqG^~6~9}L^*EvDhR9d}VoWCN z_I+qWx~17GGTXR4=(%=7&d|9?_+|Oe)YSrY@-aNAjg5^!#X;VSjZCkJbMSkO5G~Cib5Qev%_g}06^}YQ{b^#qoS*z*W}Qua z1E;@ZpCWeqw?x0{U|MQuM&*=UuEE-mFSr_QGJ4qnjnqeGi1;=%1pnsz`*3eo14e5U zbYF>!-)j&J0hnfXw_*}#WwC^@t;sK@^;_`H&W6z>=Bw%R1b03t**DEHg8(alZlP9F zpgiI?7)D>Vowf-S`b)7n?<6eE0>Sg(uPapgQIEyW)$!oH!3pCI-r^${S%H8y5#E zXj%~E0%Fi)6&2l{C&k9LMgI`L``~__;ey}F$_gYpHMIwXXz&WX(DQVlq689=cG`c0 z!pHn9w+8P4WHm80-I%DQ09K!jjEv*=>$Bx3aGXcvPXIn}{xmz&ZMb)KuncmoIPiR` zEc@M3%jzl!xg&>$-VBe7+{3|P8PZgqc{|#r3<`A#8JWAvAHMQ|^?E>|a&Jo~b#P}| zxZGx|&&Q7*1TXM0%V+*5f&PjrzW>e{3UEGy>7>`-63VLI0C8OFBfdcFDFLmtFSOLdXr2g)^WV|0E7)=dJ+CNXBcIW?%Y(SM2A&{p;7S=Y}n$ z??9I*9zT05^0(pP*g`^3O&Sn5otEKvAd&&?z zI)Bx&S_kZn19U-802*fU;m^l#wp(HjE~0g=H$9>f&dA<8s>J3gny!(TK@(lw61Jhfbg>^1F(XwGqZocGNWG=%&ovSQ^UImX<-j$u?g1Jrd`$NLTwC##fL5rzUSAa#%p zA3%{pK%uBZFawfDd+==OjYqceAPYIc6auya_=2E%1?(b;rQ=079x2NKOQQabP>>4wox4O5t$LH2!H9`+3`ZOZ^ z`Etxv2R3h&veaon3WR*W#(u8@m|XusrxWCsS^FEFAnL1ar-myG4h{~`S>JcT>>4m# z+~wH@*J*PJ@$r{jl20<+=c)Mk>PB7rEUK1oEdYDcZt|$eRtVlIOcD&jt2-bx1?ZyV zd8ARXVuza{FrmK%V}BnnKsuHWS5k0K&WNOdsru zE};MJW>kXSTzT5^q%FVEHXhOAc3zY3j3nz_k_@|tjqS3*_Md!Wf$K4Cuy7tddD3~^ zytgizbqlxh0@39kNXBWobC$vdCg;tYt39zKQoF%1LM&=81Zr8@XM9}+4pmcq0Ds)W z!f9v6PHe93`=yaNDEoRZf_L7iFPY=HUfsiX_O}zIWO9km8C^4gCf!e4xC#QrAeaA* z5AwVO_nO3!`FN(b?6l}r$2Af1afgFt`11NXeBSpmMaaseVAvVh)#`rITJE65c7K20 z2-pQp)!QsfA`N~H8roA^n-c?3+3?6jp=`B~rYzn1mZ|L;m4yOhu$#~EFX>1cs?sZa zHn|697iY1lsrSX&PRaWGmt7Ha;!t-mZ>c^6JA#@HyZv{>xq})anyEkHdnvVw?_(Kr zGtQLBhp;aV!OC=nCi>Oxv?>RMM^XjmUyzCHf%*guZI3vpD4=A})%!Z`%QZ>9VKS?~ z&~cU`zX#Jo(Hii|J`o`Dkz)RT;smN+bWDO0I??)ukH&;jsGTwxkECuHP+rJ7c=8ph_zC2Cmv7HC~G<hkma2Bf4`JY14+>0XCEcVlXH#k$mT74@+XSG763J+(}i4p zoxpi+P7b@-{zJemkf{>cZ~@Nc5izkWvaF!N6nOQ*f%M!ED1-m-58s&VT=i0j`lSO2 zaTg26^t5;?clt@-2?_8yy}SfKE<_)%uB&)b+hR_({I6W3)k7+RRC4J0C7`|!xu1Ok z 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 G{{I75(ashC literal 0 HcmV?d00001 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 index 0000000000000000000000000000000000000000..f4c606bde10ae8633d1fcd204392a98d95615c54 GIT binary patch literal 7716 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 literal 0 HcmV?d00001 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 index 0000000000000000000000000000000000000000..99f65b5585b930fa9fd05442115d43a78792f930 GIT binary patch literal 5858 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 literal 0 HcmV?d00001 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 index 0000000000000000000000000000000000000000..95b90373f25b6ab9112622c413d05ccd0450926e GIT binary patch literal 4018 zcmcgv`9Bog_xHpTi9|v?jAbyE$}%Wfl6A&946<*@7L%+)QVL-h!&pL!v9H-h=plP( zEK_2VZL-ZwjO8&5pXnd?{`ftw*ZJYzd+t5&bI-Zw+>>NwVa&}b%*n#S!VNJoux4TT zE1t;~9A}s_q@ZkH78V{P#6S;zH=azid?{-Co&Bc`1gxhS2js&%z3B1z*zw9Ju`@D(2VLdWKj?eWMr7a(jtF?3@$h z_=4yRCr44c4m?pi9KKU6UtN#>We3cMPMQB14y1}KAb-8?q;x2}5Jx{%C(plEt=s>i z&(op}dYiM9rK=bF$y2>qn`K9EIqP&Foc#_Zxt0C)4^LE4yR%_`u8BOS_W+!qGejQe zlUH+vTkc$c9``Ds@GkwS{>(BrG36}XpK+c<$Y zg%Wfo>FE{OQ^RcBZHB5CE79c@WxEjwc--pFs#>IbAo1J0knuDFm9HKcwVbMvCVFds z*5{3=R^&TM`SY{@Qb(XE@mv^fOv9}s)X&dvy)c?`xL*FID(3h2-1I(6d+~>B$rv8> z8;e81aq880YTb9kitF9~E#(E&B`H&8n|_t%xaJ)NzYPo~#u6ASL~_#omPnp3%KZBj z!RtDw$Fwjmo;*JGlS#NvXmp%ilEWqcsWNj*?LF+__nHqqJr1XNOCfg9E{vbe`-Y0S zkmml&QUtRKp*zP6>hkt-&NUa!u#IVZx0spzj~+3noQtzzxkha=XJs4z1H@Jq?V_TD;aT#jrB9D`R$pq<6WLO%Pfx=Xt& zWiX{UB~WgTd9Pb53?={iph&h%G!x? z($DK#xXUI{$dap2bA+Vdu5JHpcR>9?`8}lwl7HF=Ins69(i{=a!p|B@I*#H~ZI<%e z(ApT|S#;jpVjH7L2FIpZ*qzmQSdRo`%$R+7gwHqe-#5BB9aLc|ys&lPCHX~ERNL)2 zb$Dwy_La5D|W6Hjfc+uYnYL5+fwX1bm8@`6_|R$Xxl{yauW)S zSIBJP?B=DlaMjcZaG#=!@pBJs-hY-2@($UZ-~_;8vCYFGDI=#i*oa-L%OqXHr7-gZ zVjsqo@$hf2EjYKbbJK&G{A zZ5a&es?wi1q;%IzWe@DS!@AXUZ$lR2@hsB_4XnJr6*aU~oJ-a!QL`_dyfmP}+K-s~zj^j~@q4MZBBe|=o@EjUZ z!i9O5U{AT(jGMbfcw(q3I!@l)f+x8J>%;Lu`D`+*cPz(J!D6-oQmX!hvf?>^pM62z8?7{6Is&FjN#=k7>Oh#Kctby z5Z#9)reiH$YwmsXLf6v5!gx?+!#EG&QgtrEA}f#9MX&ir@6qQxI+4u071mwx>=_<} zY*sfe4OS?PoUyeh#vBk0Ve`yHzwqRUtm%gT{Lwc}OV|`Q-Ttq?V)7EXZQ%*&l@H-? z_iTazZUxVF!LrGYbLaPBUwzm9_XO@`*RPK}J50pP%V7R?^UZQ64C;1$EU_bO^BF7q zK#U#EtN6-}uVb2x&C;9Gf7nq+HAaI5sw;RdFf-gF`V&d5K!fR@geT9 z>X4mI*=UFuMxJ_o9e_0GJshNK?7g>A4S4RpXzZa<$!qe~xt zxM>@QDrfpnZj(VCaKY5cGn1cjzTHN3HJ~uln}%596*Hi1eSAMIs~l^5Z(K5hbe3i* zhUp0<1r2)LDD1t_s634tmgg3CWJX~0z48senOlyII9~Pxr5E673O*kat;lgg&<|}ymM3HVWJ9B@oP$U7p zmRMqk719^O%dQ((KdOWu-3!cvF@`sutUP)Q_w}Y^qyKIiqr+VG zDa7cXADF4x0L-1NV=I;agR~qnGemu|?j0}2%clnZ~);2S}Gl{y;bGp=@63Fus znw9f&_j=cua)gM6gVWwnOZTq2!z#npk?6?oOhIoYZY9xM%`GyGt96jQ;zo3wVP8qw zaN!A4`-BzjTQTuGHyAnv5-B~~S(0a0=&Yp12hmoU`df4Cx^W)$Y`e$Sd~NSZMYs1u zrgu19tYdfY&)uu7A4YcdxOxLyv^j+_Q$bH}+LThb&(NhR;0WPT&3o$eX0KZI@bd~# z+EuYy#=9JQth|GkzxzSSNyRyV3_7UN$S=#F5448P17<||6O81h-$}U7m?BhtOueWI zcz~L5&a@3p4LalKZdf_2@&3Jfo=gTkfUeM4c1;eOV&g$S-?JDo-=X9vo%sm1? z)KPJV!eDvKL5^8bRy5`t&+M6e;L)}Cz)T3UIQD%HUubC&`5DP^Bok}rq~RZ;-3$T3 zwnc(vA0NUsIs&)rFm#;ydWMPT+{)8%ghv3Q!kds`vYOf+m^M4SG#tnrw|T^~}nPU#GXF@^MLJl$m;R zt6uKk7V2%nX+)Z~zS}iU&x)t2SE_niI06Uq>cF1PEjbYFhKra_cQaefFT}&rjTJ3` z4Tak?yk5tHx=YMzthIj0LqIZV59NpTM0G|CHbypr#E;NB?lydzubPeJa?~CmvD}zX zY*H9Fzr>4$1hZbykklF$6V3XV@Z&B?9Q~-+(6dqU#nM+Rdf+IoXw!i2QvXFy)V4+s zlCk&I3-#xpOB%~(J_b?gjJt0C5Tn@kcp)`%0~PAN&lm{aP`-!bDxhn8F53`38JjqIdyoazxqEymQ?ssyA>ud8P zv^Y#%0MFY+FZvD{7k^#+R@J-ZWso%ii7^N*ppVC^8eRwOe)3CM6I?BnffxYf=xjIT zc5^l?6I(e5X(cy)_QszdLsubyc+IT|3TEeP8#noYu{&jXKp~3UiCn=L2fbg-&Q2hl z-*@VJSM+A0GlF_Sg5NNhnTcFF!&|@=X{vh98;t5x69G^DTf^gOxyoojUNfag48P&_ z_8=f9mGAPTz}N^K7F+8K;$bZE_>33ajG>3-^WSmN|qYZ0>UADwxhu% z!rEq_OU)xU^QKGt&Xr!RN@9hEB=E^kZ8|u?0f||JdtYz+rMxv>dMWdU@uf&#)}r9Q zH5}SCaxq?wov`BmbOoGkr7{0d9~I2(V&+-{l?Ptminx$gR3_^^l+en~vMFaYjkOZI z=G^{pvA0M+F`P1gxSHcucq`(XGerLq*xk`qdRn3W!_MAUw?Uydk9Q!Kz;A^^fYbZr zx$7<+&CSib%u5{-%_~{r6_AiVM&G-P)$tpPu<8 VdBxtr2Mhiq2{E)VsJr7H_dj{ayOsa| literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/convert.png b/doc/salome/gui/SMESH/images/convert.png new file mode 100644 index 0000000000000000000000000000000000000000..5c0e64a057e49cf0c1800bfc1117ff912b53562d GIT binary patch literal 12150 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 OBq=H@QYxh9`@aATBrvG} literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/create_group.png b/doc/salome/gui/SMESH/images/create_group.png new file mode 100755 index 0000000000000000000000000000000000000000..6fc2367b3e83da6225713d405ebe2410aab3b365 GIT binary patch literal 28719 zcmb5UWl$W=7yp|O0)asA1b0{@xXVIt_r=|1ad(2d2X}|XA&WzTyKC@8150q%%k!)H z*L`uTZr%H0rlw}9r%%sxpFZbvzLCm`Qs}6JsBhl9L6?yhSAFy5ZO!Wu{sH0jjwL4r z$D23gZ)C(pK%UwEI)BBj4mEP&cO(?}hp_FU-V!vz{ov3Q2XYTG*aIIU+5kS9*|%wA9$5V&TV9WPa?yC<>Vs947Iq(SplXppxAD44{6EcGiqZR?Elq8Jr;1059VxDAOqp2D7UwX1M8uuLWe;Ra zl+MOQX4_=#K&$!B(sfRGB;qh*{;t#^6Cof66YXm&2V8kw95J?=*loIaWu8!(>mS*F zN%-)RP;nxg-zRV4MxW{CJeE)wo2d()WoM^@(xp345V0}li5tv(nR6+%)txK7YW`fL zoE-Rw{Aj+Uc*+}1ysw|krZ8<8Hv@{` ziQ#gJQ5qz%dCE(k$sh-o2?ui&)$7H-;L-E zrpCq~XS6a#CS=`VGXHyO8I||v{JpUUxBNRkCpkR;@9h8e0 z&wjA&4k$Dd=#)Jr-FAe?j%86^t`@XQS&9`aZqZQCJR&jP$WZ{mxBv2LmTN)Yb{I_8 z%S-A~?|FoZGmcDdyUgiP`PZ%DW$@q5M}fFsoPY#9`T{HIyFE|`WmmJWeZp?|DxhfW zFM;jyL7D*DB4q_DjPiL8y*JsY4KLv1u3x40`4g)zpwQ{DyueV6cs=L>KL!f-vB6V+N9QAws&QVMhPJS>R`+svkLJ&vWnt z+<60Hy&s$6X`UT-X&H09m6no|r!i^qY!d7a`FK1T&y zajk{iec;eh(9MypYsd+QJ@ER|RY{4TWW1Hw-*^wl>Z;M5;eDozId%vg7e-pITnr~S z+A?Rk>0<`@=lyJW7YXRkPh*}Xfbk(%lmC+VU3+7iXE$0N*XWYqMmc{Z7UrD&GNLA* z!sE2X`^-KJoJ`h2N;#S7Tim`iCKgt_Nc10bdOU5jR#{FT`LlnP!(LwByZP(GB;^2i zlJ54mYbR+2U&aq#H;#Xywa3my_V{wAY|dE1YGnrfYN4buhOk$ALwMm*C5Wwld^d4_ zSkvt?F2MN`9jG#FfdEC4!F97dkzhrC@gA;!;GN^`1kmjWEM%Yil>Gkrmc{2uXs*bY zXfPgnoE0ZL4;(vmAQtZP|5ku09I=j;GXzm?fU){=q*zzm0cchxVtfj$Bq=hdcP0Wm za0%|1wVN7~Dv8}F00)*V)OcMwKO80vw{K4lhWfs5-?GNtbVqh|3X1r=>5o)eGN|Zr zdMuwnK$jlJkBH%_#e0t*imQD zZN5n;y=8pQufqRaw+jIsa!}7wE20)40ywWOhQAp2{?>@t!#Xg>31W_-QpyCMPi1I_UuD~+0Qgj-`vGwRKBQu& zXsTY-`}x_ydv5Q^0zFPOvi}yNx13>~{Mc+keb~|-rxsBQWVlam;7lK5ex1yTR`lIX z441fDh;o2K|6=Yc>rZ&8Ld+}i+sFl1v`dw;Hj0nrJ_$Th#S^O;i*eItTs-09c_7Y= zw!7Uh{%N$K%pO+v;KF=x+=}mLy9&=;;BejW$KVpg3V(ePg29cUbCiKQPNMvda9Np@ zE7J2dcSJ8Z=X#ps$l+c2_1+ONC`S zBrW$oh+;CbL!@8zyE(t@Tk?PA^A^NppeFsbmE#qY51r@s)Tl$@sH!S8Q(dt#Ur8uBlCR-Jnf4vc@@gDMdR>TUb^3Z}>!d8OvEaZ3 zumxdFL(w>|vlpC51U<{?k#62lJ6Qf)`ejO%$elrGTC79EJJU{VFTp%Ji6%fE%M~U@ z%KI#M(Kve*iR2J}aF|$Rva}iX>1lUrt;RYV&5MSyeXDgz?vg!0`J)yvL%qqn z)92K2v&oIg*Kw>C%G+9@W($SGNG1(eZk_B+qdfCa@0iL@EQLsP_gwF z9?eDVRxTZ$>a(X-IFA)Y3t$)d2(ImoM^m|sB%sp;$zPp&2`YGQIeOWef-9Xf)sQwilYfg|+uoFBTB!+7Qf_?J<@8E(tf6v@d#>8j$y< z3Fe|8D!9yF3JL`v9(FrF)@ya+K(f0>jdezPPw^OMF|pWnI{i)UaTbwxND{K5SR!zJ zw8K>~_!$%J*2=Dh13ieA2aBd^tGxB@so+(%#O-O69G_6>_M+vO5M*tBK&kn2PEK0PnV|H3PsFSfrK>hU zeE#{5oE9NZ`X>%lI8~#Y{HVW7gA%rH*^e)}BlhS-4V*c2n}qY}3DK}9wyx8n)!}0K zZ$58So(f|1mcQ0pe0n$!*tOjEwW-WAFqa!ZXhfm?+W(bw)H5^jD}!cE7AJ|`59_a$ z)_TZKWU8_~y(*)D;rG>24xy3KCC@nVS*^1cKxU38b~dWoHV$=zs?WNXFdfsebc#P= zR6}Z6IugtaXUpm|rQYZxY@DXJOJitFNmN~+ck{i>#M2HY4sZ>3=GwK!9F$XyT-mloCL~1Pr?I)- z;ur+i|F-?DQ~T$aElc|qh{>b856Uy;bO}fVc`~E*_Fg&=|BBl-t^Z-}e^ngg-?*@@ zZWnU%&!FO$Q^&sFNf@l2)8|dKcn^2>OB6e@D$m+H(-qu#0lA6u;}PMUnvrJRimzUk zS`B`qy;9J)`BI2%V>}I9*DxpZ1=Oy*G(=i(JjM!KMr+`Fjkm-zeXv z?~hWoUziPKdmBcOvnM`;14co5+IL>WWP@k*#A-s_G?`xw!07#}JkT9kJubLPB(7-< zv>>r1R6E1_GZ_4H_CI)Q?MAD5!MAuN(Lt_V*c zcilvk8j4Ne7hz%H#0~p^%mDjAIfwndw;% z{#hi!vNW}abP3n68do2R2U6x^+m2*t0g!yZ;Ap#qtsl^V<|6_vevC{AVo6Z)(K?n5 z0TEuE|GPu_Ou;all(RX)BlDfa(1$Vo9 z5)3DTkEY!a3(7~*bUvPuUw^_Z-DI~|i4w%BfTmaS!*hC3M{|fj#-r23erul-CNknp z4+2L&`7pb1B%vyW7<+zWdFB;T>_?r})T-s~{_ypet`p;tbMsFuQZWcHtm%H+ndRBO zXA~~V%r5M7cE+WdlAxTp-Y%i9=;EXLC)DH<4q>hW!`oCx<(0wkF2PHHssc}-;%Zec zXf@a-NwxD#B;IvyoT@7jrY@774|3JSJyE5CZXz4WJ{e!!wp_huWx5; z0<1sQvglmBFbq=*3{y9VuXQvYb55P{xPa%gR~jboAzNstrAhAPLxnP{+NoEFPuW4J6OAqk@b#l9>XzS35!Y_}J3QnSr?v^+r;INpnQtk2 zYasRt900}gb7Y_=6hB0vnjKN*^gYYI<5LXRiSmKeVv&6flZsC|ox?YM*j`r2!QS*d zs<{i^c-RQ1)5CB6I4+~FgMzdsg>0e5E^5Je)Kl84sG7QxuN^uTmSSRX63ft|Ym$X+1z=im88_rwTlt7a+8`Zh8qbXf9~O30WUBIP zvR|-|Tk}}9yg~z|(1VJsClBT90ez3aO66PP9p1AA%?yw6JI?p)@YCTLS$<2*g_^{_ zuq@u_yG#0Vv7(>3TBbMR7d5By5%Yv8-qoCu5v(dO0j0C|d`YGH9V0ttm%O8MbmP|w z>ueZ>Sh8FMSGVY$xpyrD+8Pf1Xr8%s!_pZbPr)D9h@lZ))BzP8q6ci*26FC=g#$P- zOKeqbYGcxvv9J#C*bv9Ek|rnGhTL9$0lJf&j92GUPZHTj6pcmoUQe*4T^X;6q0PV?GHM<4^foy|ac-PwCk$BPn4uGACbMzj~X@3Pu!Sx2h-ANK#zv(neb0-Hww znPz(?ZmE_tO3rO0zv#L)C91qgu@>tZj}9nhIxJ!?3TyX@!!Ke_XlP*sXUlw|O5Q0C z2a?{FS=Q=No}_r{)WXfeZ4kN_(Typa|6XTOK)*9?@Q^@s+VETEqWFHi`aLSfAa7i6 zEylKRydr&oM{PS*en*t8gL@6Hy#^~T6rc7lFt>w045U39Vpo@rP$Ll6XtuCQll5@= z%eT(UeiqoAVW!z1H$E{>JayI#3HMBLnv{Bt6zN&d$e*$WUE}l70r|C#BKpp;wAL%B(81;KbByPzc$S`XPUKQIxPBECI0 zBT7b3{8&s=X{LEGY}g-J`dN(@VjW!Bykv2+htop4?X^B4$NQS}ao*m^pB#q;ti``D zfpIhMJmdyq^z0Bu5~(rx@d(Oe&gI{LU!x%;?SGFIadbK=m49X5Yov%U)wW%@l_0|V zj%@5?>J%l%4Hp>2k#?wZRIo1eASD{U$B@7=7n&#Id~WxzvY)u{RxKvKCEH*~sKTsI zkK_D>l*pv9!l*A4$yGb%=yr}W+ETgbNvTy5MI;hREI1956Qn1iwr!ZAhBzN3M^T$v z{qzguYHQ$Hp(a0J_s(RJLU}u zGRj>1$ywqL<_GguY*a&K-IJEy9#X>Ax9Zg&b5Db*`hTA0M-@J66Mpqs%TR9>m(P$c z7mnkt+(v_zv0`aYn_+|b%I(Ft!Xbh-NhK(96Zu#IHNZ%Q3&~(cm1s9lxem{^$p-GU z7DO1p0#$gJI zflkEXh9?L6h3JC;T@8cERl*t0kQdyt!xTWFO>n16@&VA5!9&GbImONC5j-2}D~>_Z z#4^mOgU3MB$_;W`pdhecc*t%=LSM9DL%Xxyv;ZC7QcuTh)HP4cJS4^-Sm=@BZbOca-?OuS63GR)X`H?(s$(Y_G_w&^&9zSU_Wh#ucQ3?A zuRmpIdKD={u0Hp^)+6<>)y=_O64Ik)wDaM-Jrrl~*yZ*D<5|?Xmr%C1tlyl}Yv15Ox(AJUA>i zh99fZMlhXVsJQ6oBsBJp`l<-zn=V0DL^)2lc!fwAb$QK%VnMo3ktzOL*%qIuxPIEE z!A2fhejvYhKEMt&PzvwvhmZ=A{L29wJQ(~vVD>t7d|jd5z9Yl->oto(LgU-Td&aHmuL65(U{Pr_s7N3y3;(AK7?odr(k(^~lss+By zWiGW!lP90Gs?I`!uW#)g1OJX6J)(cGwW%%n1LLN~%S9+<$hI|`pZU|%Wc_&z!{Fj&8! zh<~8eW&ey|Cq_G)jdUV?M&4NjGt8_O*GKBH6*#3hB+jhZ3tA;;J@$>uivTKp0D`a1 zAVCFH=HzT>8#_+SKa`&zNG6oagcBovo@zIc%>(d&L+#ViPiwJ^J-&oomVbRE56n38 zTsXe|jx`6ISL~ezEi&<3toINM;KP&V1ZikR90<>KOzIbuR@wGPsLr0WLu1JEkQjo- z0zTG>Lir6|a;Cr^M-Qv@vgD5ML)r(=>@!M`J2kTrzj9^#+lpK>qeXWJ4*yp$DM?f- zTdCcytlsu{F?yRYtKRtAcSM2H$a8(1^D{}p^D*PbWY6Vu>3E@760bdTZz%+~7!HRC zyEfsp(cag5El@=&fzc3ldZ0u}_>vlGDP6;rsz0o%|CU(ymhs%eORkpn%+`2p`=jk7 zsUuhBZ(;m}Vr@k>7o_S8#x_^6-fk?o=<0q%_2};yu1>c-t*D%LmU>1rTV@@>dz?Fe zMKE5O*j&7(&3YxeG(!h)PiguL?^9lCO8@r8Xq)M*96m>W6qOtiUj&Irc7yR+rf#TWBssoRtUb*fNyni z<)NB>h0XUb<>~xgW1ADU7QL5vxkxFs2{!PSDz4|gsL673{gY2R1)eDL7cAXw_h#st zg(jY|hPwI4)5d^}-Cs+5DECBRW!CT{)p)Rtw%rlEMplB2@}y&h@R0x5vgvJ%T_5ex zY#-8fQ7jFg_T4$s$6e>tFC!1MKCC|6czK5#ZS$GP^X<;Ojb!Gh-lp_YZ&4c5G$DkD zPp;?We9b1klQSW&Mj`xfyEKfB)vM;Cpd>&c5Mt8i`U|XDq)o1p6oWD#GHTT*Sg;s_ zms4w}s_egY?JIH`F+Y%h%A{B;Q*EDWN}P9_ucxZU@#?Q1gQg~){mv*s;|D{+_z0wh zl%881D646LFO=3^vySsvC#9L ziC>gS`qMLk|8-oV zT5yf8QLeG9U@M)1ZEH3Y0{?fU-Ubo`Lq7i$lOzj%8ThUrQ{+a=KBA}Sdp_>|Z}%u8 zU9GjUJ8~S5Kr~wOgWgVPT?7M7Nzi-lcQ1wT005H8rfKr7L2Jb}<{reZ?>Na*_nJ=d zDGLU35kVxwxQnsBeojFp7$9Wd6EArfBiSnBcK%h|z#UA5og3q=T4hsxsP9g1ypgx% z`qRrx?$%oNDmRb&&@Uk`Se=H!NAGe|H4@-xA{MX1&6S+<2aR4{5pRX=iV!Z##pCkh zTd%iYW*MVpVH@IwGj$*m=@@#dbC|+Jpohohg;x!zrCiisci}joHV!TCxllA>MDA~W zLB(_GCkZaGdZk%$OLYlRXhU@$aju!)Hx(M?Pi&fiY{;nm!+gr!XwIYA6(MC|B(Q8P zxuEmtC30VTrcpTRPV))}P_s`MU8uaogY~l_-!*%f{9ODGQ@loo6&<9(>b(nL=@%qqxp=JN5+SdUpX4F z^0SD6mnzK9?j`AqHf@B@EnZulELgp}fV$n+%uXUx4b-tKR%g+AOPm)XA#Z`J`!^e4AswJF`qrU;q8E;LWUG=^S{9vk5LA zmsqXx{|ekjuOZ!p_q4ACgF^S;R0-t%nfeB5c3TJR+|*uP@YU=ILqDIe&piXoYIP;x1Tb5SEI|)J$&HVgR%6PB!Et9v{AnwU)06UN_T+Ls^%!2;&|7ZamZ?F7cN2%>r zb}IHr^Kdn3S=bJ{pz3U7#AA5C^7!`oWuEK#YpSsnjAu4at1T()bnBJz*LlZ&rDx>T z@~koBIN1h6;-!58dO9j2@s}rF$c@@a*@B+vmeI!szDug0W#+KHqr{=N{;a0Hf4S4* zgu!;>#gH=DADlDv;ryRUl_`h2poml~eEalXAJ(2X*}GrcyDvq_09FJcwqhyJLJI50 z?46Ne!%u)k+k{Q!xZd-&X75Sbq+x#ONEX#-?`dBEJkpOWziqMj==VFTuG0I6Mai{T zRP!m75g>MUgw$NC#r~e-qoIrVd8e}#H{_WneCw|b@9bu584Sv~lI0Fux8q|x@vjku z^x%AZMaw?D$t8#=aS@Bcqb>&b#6rRo21EP-n5MKgnm7nx&0`n#*G-<%1UcoLl5&jL zbz$;PJN2wB7YlH%-l7wyBfBw0&WvI3nnnDe6>I#6Gdv|{Nc+KXg9Grr+zw5ckpdWyd0 zhUN%O4nO^?m#f|!wy?7?ZI%1i?P|-Or0+vu@}*#Bk$lU}Pb$*R?_9i>R1E~~1j{oM zCI0Tw*osLeIK(({dT`M@nHlIeGqj(&M3O8Dlzgo%8!%k;4h22{Va&Z6lIuxsEloBQ z$9_luV$d>GPHcKOj>?V7R~Y*(qiTOs6IVru6RgF(Mccr@~Yep-@s!Q@xp}Q|G zygYKf@-cF^IyC<=59tMkvY?O14FyC-n5}6Ha%hod6w(|qa{h$PU9@XcDCYK|=r!_> zjnp_p{Gc>`(H%W7g=ycIlR@qTLLvbal)mBT=qK%mP)>B60__t zI9U?3+KVTce=abwi9_J3m-SA!q~}H>HC5vDVk)ukAyqc2$#fYrJd_aBg=lN#+AmL2 z@$zRi*F=Isn+I zNAtEVGwP0ynp+cDb&;DEkh>u;ry*k#mxBd{34^>8EJb;#ZUOw!(`_y92>4^LaxvNM zG0wsecE8wr(s9>t{cfRlenY}CQr%mQCTlrp!F!4!;3@d#Ck~rAw$nb%cBZ9jE&cVS z(Sutn=E{uVr!lIx<1%s4d@2yp63mpL!;CD;JMP*DqO1X~nL_qSU{J3I%U!W5-a6?8 z1UrTbC!@`wW~B|& zAnSt()~vi28E8)d{ikK8ZTIt{yU}9C@7%vI@jt4hDy~#aCJ4{$7=@p?=P6N^Z5o;g zM~PHa0deI*pNOZkZ7^QZ*P97SPEbJ(pBB+5w03;fFBhROKL$iFcm#S{?f=`w&9ZsrCFr4cd>87m5jxUkekC51`Nt9_|d~RHYbR?Om3;?Hys(Q$D%1XApXPK(j0C5FJ)oHp(m^Pe=5w(?V7>J8W?buB_nG3rGTaB6Jir9JgHKGk>#d@x+kn zSCtngKgsElziAYFY1(iMDo8mb)RQA_t+D?$7G~mgj?DMMFDZX@h?OLDSXtA;@-yw< z-NUoUg)}0KV@+?Q)u-(M8exX5+)V}bnUX)PNw&Pro3x18@GHqHj7h6N8ygM8wO7@b zt_g8j&So?z?zCC`JNDiQnmJqiJ!~60{CiZAYU+#fJa|k7sa+^s9->F!)myNyNH6jyn7`0~Zl)l?M7~-o=v#_6mr`O8 z9UkACAeUFs%;`e;A_g(sdBgv!nA&-uGT(nsq9@_&r39Ou;H12NME8ZLA$1~$0o zSOGa)XZ$!-*MvvTfOABF6r&Z*r4V0P0fmlH82VssBHeVtj~rzM;JWsqME>nuq*(eS z{%QMT?NPN`cv}MfLbGI%YJq0!a=9jN`=?*4I4Mw%G4B)pXVvj^@%-YSv164<=HtvR z#?JaP7TyK$b6rb0;>rHtn53NnIfhCIP`*6;Xv}>sqy3f^q;rdq)zi&dP$X4EX-Wi#D*02=mA3U zhNPu!)j)V?=LqMF1HMBj@thrAC(yVP94&?y0K}MJFg>-MKrR^A`jk1riFD%^lVxg0 z4(*;4;~W$%A^2+o%3ps}==SMblVj-M`j&(KODN{0oQ7V&$b8s(mxp+<$zaQPy){;mMTpljWZ{fdNX|}9gDGsu3@pmG z+2qz>^L4H`_j+f0NSUhmb6j2Ck74h3#hl(3KW2YNzW?VTt_rI*uKBp|w_20#$fVGE zZAgjmm!Ld6dS4bja6?(V#%s8)u|w13tigC5-a|j%Y7lye5_K}xd8P%(1mZ6Fe}jop z`|?aMR_(W{RFeZp_f;>ys-dNm@2dF4=Kcho$jZK=+I?FmT<$vzlit_a**jxZXb%=c zv4L7u2-f_WSB?s8znmQSZ<1rf15y(?7PAQYX$hjN)3=I-w-b4pZVKv&=0g zCW??yNZu?~T>*ajZkk~)PCDIKTs9G=%{&$;GmYy1KrsaLni?O4B-|9#x?KXuYm|5q95SY@i7R~m);ku=+YZv91N z^~Y?xhYhZUoskX0zpO-az87Y;An&LJ!L|``U=WVN+9E+3s~CX=5rY3~t&?ZuXsRQG zYR4GzI<~9T#PXGU&6ZITvU>G`dx4Yin_c5bE?r1M#1C0jB39!XXmf8ird4u~59Go+ zrb84B=R$pP-U_0F#+6%fZ?ibp?O-KfozG0`6)%d_w;4@~bYD>-I~>k&=5=J|i&FVVFBlexrW3Ut z2DHKQvNsh#(NVCA8!CDoVVl3gVN3Z6|EMHCJ49E>&1pUMy@)AZXv+lkL-%YEc)V_3 zs_=CffH!lsq%W{1$yBb^-m+g2p4Iiu+;>TYp&o8{;FJtOj)*Fip~0t=p$|1flkUgZ zSfBmBRXq3)xs+)ZmcAe`GMIG5Ek`_Mu0Ro3!jn{vVm=O#RJTTy1l_=?f(8fZ;hcW6GmS)4ckS;;kO?hRS|1eF|Nq?l$M$QDXpOZ6soY|I;QmX+L z+D?Fr4HlnbIdF8RjZs}tXigk_b2Wk2R=f0yF_WFGiZLiwn7k%o?5EB$xHJ`~r3qZ7 zAq*kzDM)CQS^{kj>YY776%0_2>eVxatR-;tI#rQcJK16;xaS=mFt`arWesQbUH&?J zLM;^MR9}scS!O?&4PAP;X*s%seCQ2yD<`G^o(8FSWHbsWS!^^6B8RmEU$KBSO=i^#W!{>6UU=&N{3l{E+*t}39x_`bVa~ALn~DZu z;sA(WD6d$*>%gNJi)HA9%amXkm@ygA2X|CqG=z%3VgQmx3)K`(yP(x((dk^r`X@=ByeT0Nd`-oFJJ z7EI@s(^X|!38e;*iQCP2`hhEjCb@FfA-`%J|To!8Ei81EEM%r^*d6RwhL&?KUU1yk@)9~(1g5h z@Y@`vP}gm;5=oezov|Grn9?Y!g%yfiGhMeefuEBO)nO$4YW!E=Zn+YOQzfKvM4#6? zZmgE<^l7WFG}bzf5#zj-hbW!z+@Gg|0W^4)`L*4eFtwC6$hV>@ixo{R<+IQ#6}pylMbdD*5fH*XC06vZZv~|JC1EnK?Lj3cV zwc~Az%MV3rJW@2_XU<3XdZi3iZF$t|aA6I{fE_Sy>76OJ0cLdt#{HH0H&t!bJK$cqX{tWlvkWtD&apa~)fVfT zYpdapR4Re*Jan67LZv9DL7l{J_q+*5zdf-O~r`+2AddjxZ#`qOLQ`p+|Yv}m%!R&@v zQ%;qZ+DR42n(-6cM?0-Qw=_JCd=qe)CDZc5SyCq*t$tW4*lp6|D>q5m^`9l1D>wl!4n3#+gg^L3+t4^mht`wT@l&c7uolKI zo2drMG#=1!R=7x|ZSA79+k^=OIc(CXzOs&*znH;jui`R^1mkL_5_CBxq$tk(vLxB8 znRf(sXc)_V-#5rjy{uWBG5%;uv)>0oEyG}uH_gF*`Ik9Zl}UJ+)5biRW1&^_@<6^I zx`zwRALXkm)W>cryuFNw`7GJKsxbfGKfCeURAH(mNT<1+L_wBJ<-$vbwFxZdaRZ08 z0_v(8%ab98i=YO_@(G+itA;p2oW!|cu5i@~6T6vK4Mp47tL)hWcGR4)T%k5UJP@Xq&gyW%#zIu;xWNU@a9)ucswJj8~@k1mN59)_n zzg~;a936oS!I^NKQGGIuTL+ca6jfWj( zLe}JlVNl8XzSnZERH14CmdN#1zoglpYT=er16WKue<4HB?+zznnUY3B3xur{=LbjNEUZi3V=C8w%es`+(M zA1|CJ8SXeYQUGi%6@C{eTceCi32{nM+z)z0tOppXhUm@+htA%6duyr1J(ayWa?ONL zY`vvA(INv1O@^cMcizjV`!3bnW;cCk=gqALmVHFLx`McT8BQ>#3XiQ}E4ZP!Lo_@K_2paW?Vez=GtY1(i zl5}%QdMMl|*KF*Ge7_!yK2#^e!yK9LCd#tz96yz3P5(ICBdwzcc2kQ7s2OM5IS8#c z5>iEdY7{lwy%ISimy%mj83IS$8Cu`z|I};vFuzXQ;PRgg6fKE>YfmuCSzleX!1dpa zBf3zmll@xUTyQ~(`Wy~&&?x}sjJ|~8rH@RZZcOGr$)d_AFaB8EI!e;<*(+2yFLJ1+ zX)4*YC4WZ4W)d@_K894R6)Q@s5}=tH!Ipy?B}87O#-9xr5Ls9<3_T!uq%Brq>+OdE$bBUn^K|SMe3n zRylR*ozDbkD{(d7i@Hl)KS#Lpu3L(igNj(9v#(80dNn7XjrQIS?#O`bBBagLHt0v2J9I(& zs%I~ejL*@_p%5PJNI8uff5TUfQNAJ@MWfAhJ^^sfP2H*#%r)7#kMANq8eu$gO^~sk zrRq~QB4r4gi$FX?3;ZGxry4E5CUug>@lSjZwE~st2$w!?bHF`vsL}-3?Y*Y*E7K4T z6!jABAeeMUKNrliS!1S0@7Jiy2ka?VG(yyAM0e|T9wp2PQB!?Y=c~cozBMUd3l@^E z%#9T;c_uYmJ`%hat@4W6$sfo0+Yz;gxxO>seOtD5J}NS8r)bKgj7JIyH9&BW#clrv zY?(9p4IQA4?*-c&iueNQ`(PKE^<<=p(saf{%b`$-u}bBLL!Ii+0Oo0IdOSe9aidAB z^ah*F7g0&-{x&6vfj`Yw7B5HO=mN~51rA~#_&v>`#6=B&ip4m%0WPj4GRmFyVpS5T zx2+?LSfWY+a-eBgAbcr}6EoAM%TKvN4c{OGRC2>BX#+quW4x$k&I=qaslfmdc{}7;hSBW-rQhpmD zUGtlfDNUM9Dq$3|gTjv8Bh@iad)9trEGVcInLynmHO80!Z`)6x? z?VEpcOPtDA)<WFAmqsL`rd=-yOg06h5Cnh*y@karCg|`U4>D3gVHzA^Y)XJ zTICw*f=rxf3sA<==v8Klb>GyrY|t4O!{vcUGBL}_r1+K{ z(NHsa_nm37Y_(R^tGKL{xsrvg?4%H};=6kQH*4hKjA1{VJzkE*Vz%O0!5TJrRr9e7xu~Huv;`c&bnx zzA%va`=$TLTtBduG(~Sn@myMN?$h8eekTP@d;6BmtL)~uS$PH zk2k3C)<@_p=A4pfG6jn|k-Tm%%eYfbg^e^jMN$3zyHsRHIMwxZ;R>*JxW#i<(RCE<>l!7|^6_o644_)+LQ;!G`|z_4BsZ0SP#p z{|JUGhq7!z4B1mPn*aTpT84#fvYXyhH{z3uI4qYo=&P%+sCT?>sLQ|8hnB5j)Ks%R zsS8k1ZB$TMIeDD$&Bu{Dyc3#~LU!Mca3*(H{q5W3)gkexb=@!d1j1){%;swf@6_N_@h5u7KjMGh*C0uG;Q+d@P47E0w8^1uqtlxCVp@{Uy z6qb6XyUQTdwbB{wyug+TG_zsN3 z)+AxUMlOats{lB4u3@cg76}Dl1*46NgBb7>wX|#N{=U{h7qx5ar5{Nae|q}&5|}`T zdsvbdixH#2OA&R$$>w)mX@gEF^?EKQ>k@L|+%8D(3@K{W3_kRj{#GA2nFpoIMC4rb zF#_KK29`X+7;K%nCtC1%;uF%R+T_h~75~;~eyHCpNxf?5YRNE_{^^N=LREcbuRtat zm()%jeaMxhe&z4xmMvZ_IPF83rZ1MpzBnb^8;iT>(o{575T-w~1v+ZU+cX2X7KbbL zyI7%rG$dVFL+dDEFL%EDTgxBhd&NcFS@-C{=oh*LRSUPcedK+d=zlt?1SaP2M~a(S zz?{U>L$;Dvc_d=ZtG`iV>+#hxWl&PvRI~lka55_-o8>omJGufeustLOQ+`qT?X&&LQE21H6LiTz=9N>3N=az z$075+08z$NKw^Z&ftly5qanbh)-0k|$i;N8`ciP68VydslL5*^G#; zy(UR-Gr!KamRfIrdDfltQQF&P7h+haBmJnD!g0`IgI@O$2rJKues@GIVQL#B(s)T$GH zpX{%8Ekw8n>4QGYWZ~#PBT9iIGwM%O?_b7-}2Cdj^(R*o-1jh6mF67J<)a;9{g$5#+QrZ?;vIMXq|HXg7Vpt$aPM_K0>GLo~ zHggb~v>?)MhPryjrqd@&TUMnK8Dg9A;Q|Bm*UHu&nY2SSMMBGBadq+i{m2`xxwVz& z?MQ^4_@18}Je%XlXClps8($4y;jj#RMg;FR^ad(&EPSD`40ZN0rTX85*+>5&v z3oe1;g$CE+R@@2{3tH@(&-4BX?@w84*2y}VIg>SW-)HZAB~sE{kmqR)(u14W1GO#O z`oxRJys#E0m|8GA(|yVoM{g7 z?OHRv0gLzj5yphPb_Ahk`0eXX^>njqb!@PIT-zTe+=#3on?0#(yhT?QRp)!YsDg7H zmK&f-u&4R^oB#TeLbZ}YPoDuj{W@d*3f+q5gqQ^hChg7nYqxcEe@7LS4EP!Qf?8mS z==yF{tzdlr?=ZR#(+fEn8m7fJ_BX)f3-cbFKb7teAL??p+_U4?4LjF<1XVmCSDnkt zD`7=*_B(8JzWGJIOOLx8KsrZrQU@~Zi$=~2I#Y7TfXGAHvsKo@o8MG)t8;D?ws+13 z7)0p7tD380j*n|V{l3~~LRt|YLkU0;>S=9>leUH6Lp91{;BohtE!EO~5(h$6LMFp) z77y$uP;Un~^#j>h=)&>RDzH*p`zh^P4@a^}tO|5npHG1fz=>q{oZ>Y zT~(tIqSJU_(OuUf;f$$1|&aO~r8=6BKIB2_PC4IB$UECOK|d6aMy- z>~nrfW;oY;3U;aRg)IFrH?PhK(jwIhT!aHyYV2)N?^d;HeB|yN%RHs^AodQ)r?Q4z zl*@C>5?_1MhRMOW>8-MUM?qp5l(jedMl-f_qL=R|A^bF2X3lw!Aqq#4E0$NY7(QSq zk!d$I|JQ?#I~2pThqOk^nlLuMAex-WZk*vvsg{CFQp%u5wjKxj4x^D8>d$rCvHIzc z$M3htKxJoxvS5>TlZlFHpEUkq#UgUcfy;e4rQAa-niKu}ni-L=cn{_t+rKVS3!c;C z;0|>8o(~wN{$F4)O~Y`B0ZoB_M?}O@n>wZEh~i>T<^jX9*F01o$qni3^ElU@SOTf+ zn*MR(JkGEONWzc!jMx;;T<=TA;;?o_Vc`7jLGu|Twz3dgg(-*Ph_+2umq2Su`gR4e z2xa=3H5jHe=o&wAcxN><$%C#jiWRnY32J~A%`WPp`UpV_W_5l+k;b(!ytn4TO2^zD z{(H1YXn`CJEMH}1j(r)qD3lgA${1Jft1ad}|GHO(@iOL#dK}Yxn@OnV-ldnLS=1kQ zQYE531?^ypLVwGm?9&3PUiIl3hQLl{z{k+RXK}eY+|ZQ>0a}+k@}e8mgG4^)4L|Kq$qKr^%NsN=hWc^{J?hI}LgSG-W~;M10wl;}v%RI=aC^(l5@#%jar zFf)TUIk#PNxR@bGPx^uw<}2#X->LX0*G5DvKQ8R$I7DZaFWFcfOxd*5*Dtk9z zYKBC2KK8%_i-s`M-kjl@)s>mZbQ&I=Xgvo){1Jfc*`QPgKx)1`=Lk9zljY4?(lRAW zbm_D~QtBI<9heElT#hF8#v&mai6C*R6G^aVxu@xxN664PpvFS|Go*`)T~UGDqMs=QMIEiN3|dbTYq~e%K^8&XVEh zd2O9S^Bu~b#(5bU5rL_17tabe-)=vLG6qWzi8mG#F-=LS+_eh+yRG{{hsBMTT^&|Y zh8-Tjrz@s+@tF2rZnPUZ#yanUKC3b_NBwYIJ09AhWLv0TVYM0W{SlYY^;iq9-q6&q zvFFW5h!xz~cxm-SS2rb1G$e7h9)1+hhF08&qpliNH(1O-V)>*TFmF4x!We5U$+We9 zrQ3V@r%%sjgQACyHCihSlcB~!Y5P`Uw$|*+ zW6L)vkaMD%vJVkFk*YwGfgEDLLtyHT_s|yk?iRchvZ{hv%JmEt1C?7OcWm325!>_H zhp_qa^xi?=R@JBwdyiy52W`9}#8Z}~KD{rlAhxfng4YhODnrknh*9(~uZZlw~ zJ~GiQbs}zFZRqs5UeLQEj<*OEbyb+Je;zqobaaI_VmZ1ZCUt*L*LKj()e&Pg2d&{_ z9tgj7#3yPXiTt`8=5QKI_LFE-0x(|DUTsPN2l)#P1Jc%j#J5y^oHI909wh>W6J+be zhu9)^krJ@P!nc@Tt378{d13`K(m&m1)N55sjYJM&SXVro?Fr8vpEm$XkBSYyZ!{#t zkMv6(>w)3=obzqIQ_P7Bo{T7-sQUSJ9Zn_VHLVA@@Qaec6_7~ufG6nf$*6k;3Hy8V z)~*q(hpp@>z;~kF4JD!;!P2aYQ;YWClAAXul#UNXFCB5dSSpZ17+7r<5Sn4THMO?t!yb{aBa_C%e>NbOJ8=W@J$ z53eE>%jvad7;+}(nV*os0ZR0TqcW7F2TfxM%T2h=uSqPd?jhG#Vx*$kU#wyGt|z^W zJ4yk$B1Pix=*QHhiq=+P*A#pORf%t^sgjS8pEh8OlsP{9Xum0$WZa%hqqIkX zs#jNLoxaonJo%QC;XumnsDbg|9DbO4fXmosy-0@C>uQBF*afObtV|??URR$zub~c1 zx9FS?UhR?f48pWGrQ@{Y=TuDRKkVc9bu>@^t>n3jm4E-E?%z(7#9TL!*Quhu$N?>u zcQL?&`ni~!pwssIzTrNbSN2zc>__^GU!$s>lxVu7nh?1u_|3VI*m9S>r_HD%XyGl_2!!FZIl?ZEjL)Ts_dV^YPEY?NF7%met=+ z^Q>OAmOHoEoA#M4cHrtJuj#!c?8pwB9x-Gsu*MVxsbX@bQ29g|D|4`lE9UQsi}NsEy)29AFMGeLk6Y_1L9EqdS9(S6&yzf4ZlCvVWiWCNMzufE(cz!d z_F2YgMz46&nuJT3tD=zI^D+x20h0-CFWue{Xz4oR_;6^z>eraG_a~Ob!yX4`Q7wJR z6T+Z_&yJq8yc5uxs15lyz+YKL3$A08dS^Twlnp)m`y49>wT9msg+Kv?65W+Is{gdvPklZh zdBxG!hl4KjHU0BB3kd=6925UZJO4g6V*U3#-y)2o)RY+#OEB>YFx?x+gmAm2QZIi8 zqn~hBl~;lI=c^K7vs&Fe%hMDqE%D>O07a5a=IXf*g;~|7LO*v!^0NF!y?2u+>ul{t z!t)F5B~Fb^6e&*4X)CnX(4nVUrUXWg2~0KJr{jVHD1!DXbH4u-!O!W$)$OAk8K&;7 zC=+MhO=r89*PUFoAFYwtX7L{wqvnKI(^ixo4WEN5LG(1pep{EH2L4uAi{BpJs+L0} zxkam?6=S&nF3Gn0sO~Q;UW+O>(4>DfxyNv?bd199`i1u|~uV=}Aycl!ic z(=iI6LMA*MlIy#$U*T^^<~VkPQZxTVFyqgd)R^cMu8~^H>WW~QuYEckqa}0nJrjCZ z#?)aSbyvrBX_Y|tjU-$j{B7iMTNqWVm!)vQ{8s3jO8o>Lhq8^|oh$q!y~iRIM=#wm zu#H(A#h(5`SaVsuI-VA;T_Lu#t^VUg&^mjQfvp5;lq=`Nw#BlsC(^}-Lw5X%pCygN`!3G<&$ud0-E`~}>dO;_s5&S};C zQKY{U41;LzPRXs6i@rRQtz%qv{(5o0s_g1cD}s@;tMU4xlc!^_EEV)^&6-*%WR$MV zO*Pgxv^4S)ombm@9eV}tdamzee4`9z23@i?ntVN}`7*+8qX*ZX;=l1ME|9OmH@LJp zttOaAvZTPSGObdzVdB2|8cf(x#WS!OvB}x%S5e{dP4*i$i{E$38TL5Vj*_8f8kusZTo3QM07=52@Qf!rhvj-h(=(AS$qupJKPK z+!$;9a=Ho`dAUT%*^?eO@4^qEg%w&quiU^phv~y8aml)&~er!ge=p z(<9_gIpR~d?4&SduSCn^=gE$pGWD{3!qO3$A#z`L725$*t+H0JcMYF&NL8fnWmTk3 zz8K(tQLIO!)6(z5mFBc@jV_-b?}e`R@K@vMn3E5PmrSyL>8LeK!hMSD54dZup}5~E z9s}7uV8{HhU>bwELeR?~(>gajonO7qIbD%`wPdgpoDye$#L*Z2(puV%n1&uQ3-K#f z3>WPJ9iA*cVmlZRFrq^S(bRYH)qU*=&u~m^Wp_^;!W6Z*CIvC9C;D{SpxUKc`~2+x zO8*^;L|c*D$D_2A^i1sMlhTT6V8>SYPTjB)Q)kKDlA4zPtt$WGIVjG2(CmP-T7=5y zs_joHqD6s;8DS{r%gXH3=s8{gs!6)JN2y!K6IJdK6HUrQgs+(brT(J96i4>?O6bM&v%S+LW9;OQ4yVUJA2VKY|f{Nd-IYuS}ZsSPm4>aZj@!Sj; zM0n59niPpn`5LhayD(mOvjPj>%Q05pi07;yeE@#wWyvRvQ1#hZwb&)X*)u(Y{pRt^ z=&X*>2?@iyW=}KX9~89rM>GRi-!UeQ9Y{R~=boW%=vkxZ%%Eqpo+c;wGu6ER#Vzwd z9U4fQgC&tYOGJp5+Jy?UKNsha zwkb&E<|uhbBrQX>wDLzpy>1v>=TG5Sh+*RJs^c+He zR?&I=N}P-Sy~Cq5)w(@eR$iCZKiTbFOTQc4b1QaX-exbf7aE$QAf;`nWXY|f0q-`o zDP60pj5g7V%iAjCxm*2$Rd_@O;41K%DN1D~MVC)hDPbniB4A(I%#mYMSI!dGp}=8( z|F6yqfR4-maUG?V2B)Ei`!^byv#lQwZ#W2}x?4Tkn8;3x;%j$CyZDe+outB~&ZdwY z7yd;x+lHVigQ&mf547AzSE-w#;pq1~g%jBvzAEbPF4(yUvGx_d*`zMp`jJi$*^X{AFFKn~hij!&Vccu`gTs_Tw!zHdHCP9*$ zsRIc0r(I;vOTb_8baD;DkM&(q`+q9a>=(rwFx@QLbef{H=om!Z6{z6(e02jj!_^Km zS|3Bp=bW+Gr^5hP}AqB)q#NpXyxcMO7u)poZ1rbYrujl_< z)_0U0!8Sn-6o0N>uxgH)LnI#(gE@)#);U=ccUYTjy%75+#=4~q(pUWRP1FeSdY(vN z@X37Sq|=Dc_$@1D@Y`(ehBp1Y2tYtLws#91Y1n6^ZXfrz*CnQVDIr_T9D*^-)4Jf7 zqco_jH`l^*L&^)ZJuIsmA29_z%fECC`BK4^hRY{1BD?7QdGAJcf$O4so+2E+-m37o z{W|KbfGI;nKuFp4Jr*8b9JjeCU;i2Y^S6)7 z((7DKO~kIOgC#`SORHAPi@pg$yOnPjXdeIDC3-`0THSr>6+q9!l|nXzeAz5*(RADx zNE9&0ldVLh{Vap-O{cc;^;g&O=-@Cdgg~$*k78X8{?U`K4_DzaW105(-hTZ^KY5nt z>@{LGzBOZ$4@C4@ETiG|NakhzO*HpWmeSRjW<<{eaGbv+%pUK8BRf4-)K@ zHA|{e^=w6aRJ0CGk|mY;zb-G!2_<}wyv~HfIm!2SsDE!dO)#vV$w=6GcRZd6T7y_J zuLEuUdn|L^`Cp3;R`V4Oy!X+!&IvBq?C)2Gt`zliDV`Ck){apBR^{wD?;qVP7l$>4-?ffd5@pNv-ap z3gxxQ3Mw^_Z!fqUjmQrziqx!g%Mj(lXzjb_3bXr_)R%CkjPSY~vBf~uM)N=w=|0HM zNwS;x)$qGINVcy{UxY{%JFv?se^_N&Dn)|TZ3R~p4i*vLyi02+wx|hBd$U#WAba-bU zJLT5g$G;!*?1kw=TywQ7EN(WYS?tG2KiRd)*UH%IFK)lx8&Hj)jm*lMN;*@2UtPp9 zTS=`y@oE~q5q+7|(0lOx+V{O$?2ozhi0+a(=fZij<0M^{+W}fA2H^A)#cl*mUpuz~ z5j{9VgHWF|R!D%yQ93yaVTk#M0q89*Cd1BBU_uwA?TrJNDxPHv$Y=Xu#B$H2tF%^% z25h@17HI&{nGep?V?t~U-LU)pj@ZNnk-RM=Y#oBqeC?lZ>FnB(6jdil)FQBUVa>m` zAE}({k--9H6OlTiV%KPk^BnQzEAafEL)23UZ3;@^_S18<`_M|f^Cy>rFwWNdD%~#T z`skrc4aT_Js&b9_T8YKu*|g;FYX)1e;3V+r2IU(!ZVtamT)5Jw{xSaK*Tb%`$+u~m4Q4b66`*}gx=K=+mGC9dIl-(t{`n$lJ zamAi$6p$MRPBHU_p6z;!o@q@^QdfY@LF|Vr#C(Ys1ts69rz}w58?OY*CZ2qKu_4ni z<%xrm$z7b`ZD$4ttiel9XyiAe`f2+OOF3nM-jH%J3a(0@0D*iqfi4$)e$lpq$$2OW zzi`x#&@{c1t^*y^93SPcn8+2s?>X>!IM>}=RZxIrx0J6|&osga!0GG)?gcz!v^y+7 z?Z4UohFgfs8nz@M$rZpJ+1(d^>~U^ucpL`>Ys{86N3J*D$`Xs5MeVmpn}0uj0zQ9y z1E>tBTe($Reek1=dkPoz0&_n%jk;!vSp=7k|H=h*kbrC1fq6id$qRy#%A5G>Q%>C8 zHH0sUUTPD+7!{z@TA%EVA}V#VEAhJAZF3{UJC-e4ZLb6+(?Lk=$Db-sVF~R^6L?1} zpiE~wJ9E%^jt!-4APx%!Z0!r zP{92~SU(s9g*})F-6Z;I3D4$X^<|n@jx2U%ybC7$qrfP#bxkpht8oO+ZAjQ zYE$6ZsZgA2nt(Rs@0ZG^JRXH2p4l{TqIFYbH)jc`PZ(-HnsJL1Nuah7*tp*Puofd+ zC+b%KH}exxljIvZvUQ&Se&9cUhKEld?6#g(C!L}kL6l7J=an(1=|WwO&*(~4A^y6Xd#ysay6bi#a|#VSe5-L!%F8w7hv4?eV=V#VBDr}0M*hRl;1_5 z+y1SWIw%(OONv8ceV6SKC(B{(xL8q^I_jG&#igf+5<6nMl=(*JPaN}@;K22UUoT4s z0loIgC!IxQllQZJ&wva)lgN#a*EORWX&D0Y$!rR427?n`8YdxjgDbCdxf+sYIJ+`Y@3-*4W<+nutD_|$O8 z+_R!ujuce&7@ol<6*Yw9=y}jnI90B5-he`f?k)eeQ|!0z<1xH-hKHyAt?JQ9%AA<0 zyVsXMUc6E7F)*2o*|FekqaU`q!}vSTJRa|D9fEuGkbo;4NDM6?7?3RGxw4StGg@+r zA;I_RIhqk0I)a%Q^)!W~vLUPJcw*W}ihQc`p=2RTE*D0VPt2#m!p*JqsUm zJ}~Fa2!HE=(1*35-rFwYp20!LzBa116ncgQLgv3<6<2}H`VUKY+iWB6x*O%|KEJ&;+SK2qDm@S9m-0^wIHHD((QVE$D7ne%Y)wjQ zoV+`t+;AEI>&i2wL#bxZuHBr@}l%sL>C=VsP3?!08&XXxLM8R4mH!Hm0v5+Yp_ z=Th!ixNt9(0mIWBW!Xp$e~v?7ff=;nd;La!J%vE`M+FHD-8>kA71TY62LKRAs4k@o zqu@kIM6j?Ur(1oivuiN%UCN?tlC#hu82pnBqpN4~1^vcwH92K`j@*=($6U_!k>AH& zqpHHF4~6c-8;0eGWSA|3+^5!=_pa}Tf*zl4c3)%A>}u(KSm&?lIaLCH1D2aBOzymS zG(9;P2~&yHhmHKMtTZUlzGlYH>ZWFbVx^q+B}R%t1Cs0M^u@O!ffxE?^>~TCl;|3W z03h~%qKyq(y%jGRRLQ^pg?C?LAeB=ldrBkgXqN7>bzua`hM|Smus}vQo4VQF6Y_8G zW!?65fto^4gfgD0+qaCAqL<8B*s`2T$WdBUaXyX)6M93ETr0~cCx>!teWb#xPQwI} zU0*-%zFy7l{qUcnhZXXlD*!K2nwsnjlHlB+-eVCYdyH;yW%8QZCNQtzr_Dp(1;-YO z8r}W{GPp{V11=e#2<8uA&*}E#Qg7lX!=B<3AF4+a;vdm|eszT>9DHHL!gwc8bv|D* z60^N?RtF&H!l4SBh*Hm2TJY(<4>(P*aKJm`LM}N8d}Mqu!vzG^mLIs+ElMYDr^MxO z2_*}($uN#iijS0;in@G8gx2BiiBLKQvk3jzg+(at=l?!yeWL2s>*?1w<<>;GCOC|I z=000EHd%IG8nhJirhK7L8oo0TDex=riLs%>Cb4^LJe;wOQ`KaHnYO9HOK;H3dA;rlJ;;{uT7QGx1- zp`I#^5x={6nW@Ev$6*Tt!9O~@A}e=K8+f9^Nu{n2)~f7*Rh1&{|JLJ6>$L6Wg!3qL z6ua)!-AxHX+s5=9%EMB*{jV5A$CvULj|}p<{3rw7rZLQTof9;v1f1@<9V+T<#SQhx z*pXehuoPhcK%f~@7KuKlnAZU7rJqcb+{%DqhNlz^WN}bC^7y-Mwki_!(xnq!@Gw(b zC5>`KJsLHOM{UR?M?7FQ1{(c$dJ{N%C^SIwHEprD$$Ua1XJ2ZPy{F`J^!ypp=(@hx ztq3C9T$WWMuSe$R3%vI`u^iu~`#JT;Gi96-N|hWz^mjoK>xXt;0p>JQq0#kB6zp6z z`$?|ZJTZ6QU7aM+UEf@`Ns^t99umrgZkFU==!bug!qmK|qbT|3fA8I@>2hHj z(oKwDPr{}a+f={>t-}n*cdyH_Lc`=dUpbV}ory%D6GiL;dDY?K;vZo>R$oJFoqGaM zF2xIZ{u^;cFdESqUC#2pXlzVW>|AMEum1BRgoS?C)h-xR7cNcxi5{oRM4-JkD2JDZ zn>8@is{YZR#Xm*oLhLPlf8#s#-}?@_aejc4ujichzdV6psSS?a`Ivbn4GBUDy{*W( ze&`R;tM7adw!w1vc|+YJl`)H6`j^M<-EE?k}GJeC{zBiLA|DtGH25tB)GKb=Hj zvg0V3sH)lf z0sh6K>=%84#DE^r8EK6*d?Q}9zAG&Dg;ZyWzKB*XQRG=lax?5fZDvbW;#y>e_0)Gao3jGKc zGso8r!L{oW_QcgxiXfBG=u+ycnr_C3NwyX=-A+0t^bukD!;$tf;5l{nK5$^85VqQX zya_~v-x@6(i5MZ*+7_8<)uY*SqmfS^zvv;nH{0o(&`6^&yoPKVhMzqJYPqy>gZOi! zJG?Axw!X6EjtJn(#mc#u2(MWxZF4=#pClB|Y-C-VqssFZwagg7%{WU$VgamrU~CU) zzXX{hYnm~z$}JZ=M(52{k6fTPFPcH>#Bn~V|C=Qhkc^%kF4_2{cDw!Z1 zpabgF_fji-dDjXIc|H+MaShiS@b39uR`in{q$#bT2p<6Dh1ILPO?tq#&k2fwuWOR+ zKLvYQ#d_28?&#UC0#0SWk@Cki=uX#CeT0Ggof->_AgSa582_ry`dE{h%xSL zi3>5WYr1oboOT;O4_`l}FbUkuiT2$8K9v#Npj{V~$w5R_3=q=+}mal7YE zQ_*(|_M#WxW>py1$)BZ4Zh;|j3{$`tpDh>-@WoP${R^EpMS+ZQ{DC=EB1ae36pvumyz4`>^j70^tOt4^unL zeSSXM2IM_I_sX(7o9+>EgDHoiwQv0(&T>}_%%ija0lP%rSZT@b3sr~jh&;3WdSU#h z$)RK3V~}r>=$vX=O;aClb%=nLC3iTrJi1#VJo7S5Yko^kEfPVj=-so8*}_{STdd#I z8Z{U--i|ZrwUo?a#k?iVK1twg;-9eM|2fDgPN_r{@-BNmew+h=rh27y>c?D>$#pm& zR|$6K9BHXY5REmCZn`e1kNs~kV`xPO(tK5l*sc#^WR`#I0=-Y|-dHsx-Y5rBYYy}gc%V@A61ly< zndSHT?@aBA6rp}&JO7AGDSeoW8YX7=5DTp26k3I%Xgg0nLtMV;OU6%9!ot+ak9nXc zayE`1(}tR=i2M(}UbeDUuFe>Z%9m)JNFV;Ype#f-&)*{k_CZeC+y)k>UbA#Ys{>VP;I=s1kNM2-)I6-lz6u1vY|3q&BD+lBSGIk zzSxV&N{pnTsV-c$eyX>v*PlGPAaTl!`0?S$B=zw~2!fu)8?Xsb1Od=P5a$s1y#Jq% cZJo!L?P}L#xPn;_0tEO^koQ7wx;-u0oxbg-tpSNtErr!;HZtZ@PLwWj;;C?1L>KoiPDtdC+$Zw?=7gPpPJCjm=CkK1; z%?1Vn`UbQ+eSHH1o#l2g#Zsm_D%!$A8ILb4XZ*9a#s}C<#%^hk^{I?CvbbQ-Dsi$7 z%l3XKD3H#tcF$E;%p-{G)^pMLwsqzkJyQ2dg7g?rP?Jt;l_4PXEr*%O5!qdDS6eDl``-)YpSr4 zubOmstJkL-U!Z2?bJskewU)ECW(|*zCx944`X&@|S~^HIw?}!E;p-(oO|WeF5(&R; z(2FgZC0{tZ`-FQYI)a>3L3{?f)w6L^v88b-Pen z1w(-IxB0h}7-<6o8iO)oB_*Zl>1j*52CralGKnk_qM}-zl80nM(TXQKlhI^a%mV{l zwKY|i?A+M+H2KQW7L=UaN`^)sSdw9UudG;kBU4hEEr?hmj7vV08Av51C3SUm%`dhG zLq=*V$jQkOY?d`|oc*E?8o9%b>1q(p6|9!5yjDvhk7HT1T68O7Y7tvoJp-&tL_|qa zH2C8Y!#B#gKC$!DeK{kR4Sp6YiAk(C(UQS|BYg>a^U^CvWg|Zqy0PUnrt^uab!sx( zNR)&~J8!Y=e&OASx3soi*obCOZ?KN{!zTIt^W&%KnVFY~{d#%^-x4BPPUdd>Dcre4 zuWnb$b(Rr+l~TNRU`p0saUoxHW=(rwUkn~M^#i$lDbUw zk552Iv;B0!OI0gcl09JN$?)j)P4!spl^YDgkZ5aUBc`H51CHyxkPSC*oYbV5kH zKj^xZugpYau0HYlz)xxYSJg|q$EQoKE-bRLMK%krj5inVoJ7($L6fE{u@tx;Ywe{X zB$=vGl0=N-`f2?5C%)9eMriq4-x_2^vnPfg%v4Kc=4L;s=V8|y9~X=T(=NK9ArqgYC}3ie8u>D~%NHsO8q|KNj4V)>NxV=qNZRsNM4BPxxJ;fksY2(K6&l zVr6CZsoCb$qv?9|a0<<)(W{%DQKInNl~CBUm4m~o2a!kn%uMoa?8o0?VlKj}%gW+I zLZ(GO9Bq!Tc2amO_rMuO>W?@c&zS2BE-+B%!gRaax=j~T7G7?t@ZR?%Pv=DY77@{6 zRyorVCV1U7%AkZ*KvJw9%ifuNX8_WjLkyLnkj$DJRK!vUV;EVgtEQsG*-3M1$#(U~ zWRK;0_g!J^0jKBY`fDD&QPrCCWQ-clg}v+)_;~8z(0Vv^T>k)HEoG=TEY@al-V$2R z9TGSAz<6;xuq={Ta(+vXa{sE;^`w>BkAJ??n?KQdy$Abq6|c>UYs1-)uZGL5Oel}| zzteSk9BBXkS-T(IzaHMuPb|1Cyx2G??(hHB(!SvRmOEBpxWxPVYX*no%UB3e!No%`7XdK!!qH9X%gQbW3roHsXK>sF?86ul?=JZejQx$T{F zdaauSjT93;XegjDN0{sB=`A7O0>|rDcoRch6za;{P-A2*$BBud`A-Q z7u%eSgjmMwoV)o7-n<)XRWT8orZe5$-Ja1hT05O+GG>+NiQTtIVjSSp)ixQKnFMMM z_QZMYoik7LFx16wYxnb*RU|aYmkxfETNfEuYtWm!Nr-StUzDEQn3MG`67WbJJGo9S zKg{>MT<~LPxRw*Ew?gxbW|7oB>n%DM@gYtU=acFsY{*wVeG%HCN`%l1Uv{_!P*fyoZ-+5!9ssHJG7+y0iUM@~&dC_?0I5 z!lA-UsBKH2agbPgaERjD`2|mrs}5>W-7(=S1E2eqF1T*aCzQ6$k{x_k1UC+OxDePZ zsYqDojj>DrXNDri=fs>p-KyPfU zXJ8PK5Yt^@(#^%2Sgg!AT@@}OE{@r#E(wjcv$tw)r`|jcb*@x4ZKOaSO^%N@&f|rx zMDwrRRL(&1RYpQ@uFeI)gJ5Q6ZXd&*C}r4$^!o(Pp)ntctV=&Fwr=NwT>rbplx)F zE4t)8XzOz4OZVk9>~2I>_dpRupVd~fwThO8tH`Uy z3{S>ajfXag-33V7;k~hw2eZ$4ZWmS@wO2Y(*>6t;D#1EW+jGbY)S&aru|-2G4eii# zS&Pd(1A|zTsUzb7{n_`MicH)`qa@WaL?xAnlCKa51Xwal_>_XItX#<@`P;_J9r_gZ zGV`S_uxa)^*ry?4(iOU;s#ez4Eu;Nk%NdNJb2DEy8j=#;ihrh$C-%@AEGE|a#NpMB z`6-3JgBNQGGQYemZ#sj%H-F+;8y+(naC9=l(7mT-k$Nl3_J(upP~P08zU?Sjt?JqX zH|D$E-k3*B*KeZOmpjpN^QvKlQk$&vvj&XnRo@b@OA9en83`K%9ellTZQ&z1k!+?D z-`uax!>!LqB~lRY2Y>ugaD&N22djoKN|U@kTVUv|d!3js@g-yspM zWve=Fm>TSU#W4fya!a3y5bNe_50h-iv}2In)p*H;VJ^8=awGa?DkkS+`fZ14O@?vj zWkXrhi5LmR+4GBU4`&Jt;Z)MSK(3 zQ|iSA*slcD7^`Y)b*!ydI#Xp2wtKlZrQg5rRyg@&6ROS8%o{wVgDNt}+kt-&c7PC^ z(rFjZYX6d$X!67E-GIyM(g%#9O)8~=3hn2ewE4nQ&cDM7XtNEj=FczM4uj6%A+9_3 zBT+w>>F7VniD&QXD&DVjqS);{;Wc*dM1#T&SYZ9Io&4qv)zruApYNAA6IE8)tkn0@ zD!<%8Vb1)zI4-fCbhgKtB^lpBo6X97FvpOuT9Ny!be(%_VH>+stYO^uq=o!xvT8<_ zips%9K8-1TbcF%^)Vp)75k#%sFPvo44Vbd}wY)cPoWfI5x>u6t%3My&8^pWnQ_@Al zvbHr&WNW3#QgBqfCHikyZ#*oij5I9zeLzmMF;dWbmhsFyBWrPC0j24aO&FmnGdnv$ z*`(wZjKq?vzh!TSWfc~Sl?$7hA4wtYU;`R^6-t0E|oV?_&)~(2}G3o6zy{fm| zvin_lBl*?YWAV2K2aKHiz+-l%TkINLLIm?jHLSV7-sZwgFPslytdvS%_@^U>N^ zf!Yr{qUF$$$~^NX;+X*lzv1Q3DYn`jY*7c{wvNfkzG08`CON991DFNTWTS^*VPPSg z`SgVSD|6_U%o`b+q_!=+G?}>uJymt(!yW++Q(m+28Z2wk4Hy@@`83yZ?tun;j#ZZ4 z!h&z$D1&9s)HOA|mQwdqg(|nlQ{qM%JEL_Q-pXlfETS8S@Zd&`ayL8ye*WaBsE6*? zXNCjGy#CqQv@`Wqz_AQZNC*lJ#_CUCUqaOGbaYQfW5c8m_NOe)jw)MH@1!W4=&Q|O zlgxsyyV4WQkdcw`Eg?Z1P!efr>C@BGUpaELNl6-kXN=)pCpZKu4w@;%{ z@`>TNmCtrhEC}@}s^5&!>3x07{vxsea<#M9wHW?vQ&3{LvX>g`drv-ZVqtTj7_(EO zAADo6ZN_Y4INOG5>U<_hCY@)b5Z>b(OqaxSKr)wd>O0tY?$!26C5(^$I`M-?S7EJT zCvR05+>Fga-F7B3(-R-BwT9}*tS=Pd6CkGlu_-V>2ToGBA_(i?PNSftgvXpT$QnYj zw^H425?aqP4(zug0>sXoT%1;WOY=Q#=+9!egoSc*>r__m>G8A43S}hpCh9k0Oz)(> z*}N|;lv`4#5<_5VaIo_!Eyh&-GhTS^bBh>#4R0F`eSU-zAf4dt9_ro}NEBzUsSJKMrT|$B z0nK{$Gf{^(LgG&hWAxpudNCFAdED{CH<)B%xY3l0bt|Gwg2s30bW$US@6c(NsPTfUf&J%%e6@qz}%YwyXWgtG$WNMn*Cb(`wQ(j|K z<;{X3adsX}WZ?Jj(~A@&{d&sE$_hbp&fSGp z0tLH@kIGdFF=!Y#%Tp^_9#?jm6$+!785vwPShDB}%1vhuC#%8rT9Dn*SgoP{MiR)~ zyLSP*|FY2PhyQ}h^YqjaGOK)a8x7;0UfV9-p+}YA$B!SOHE&n^cbl$oU+C{g1#M_% zGB8h<3OfE2b2~rO=?o=2Jc{c&C#ZEsqNinId2rl1z#fN z23>B7!i#Tl6LIRgHEgG*lV3ihzs{_f^(6dMxf$kK37iFLf1Wu*A&_S)W z-(K{_6?pROna@nE!@;b}4#CuMmDQ4RjV&Fo{g(D}SNImJvgjAo0~E%wLXBSJ^$k!;+dJHt z?1d&pM&d(E#tNU((+A}#6)rAswRMG4ne~<%4W&(~%UQ`+p-eliCMR)OeK8p?#G{~) zxj5eT%I`%lP^*M8#n$%=UY~x_blnqX)@leTD|;owx94LP&tWzd^*NE#_;*IrxNn8q z;o8T`t1G~boNWth_MzZ=S+uma?j0VsnGW1=Ruwl8j`~d}(KF72s_k}uth4aNcN(^- z3By@iUG3Z$%`;vZ4#~)PX1_Cw-4w&5rd+Cb7l7#`ewP?`w+pND+F@u-E}EzxiJn6xDsn%VU`HxZ!u0b)p?F z)F>NOz{51D6%Hocnrlo&%+wxqkXXzwEHp2L32JJ?TK#cXYj+x!j$sz7jW<^;ERC1e z4M)skACY_LZDaR~XWDnbm!dUSN-|Sz+rRV0+uO>iqV0|93C%-TdwD zBa`uXUJG-bQAMm{oJv!$o72E&f(|{+v0YF(i`?2()z#riNqsH8SSUt-|6gBUkL1Yt z=P4DH>UBq8?#SqvHSTqgNT%?`PgR)6l^OI?%J|+KS2p53dL-8BhrPGI-vYjFtfq4y zom@}@jamZ7@{0DxP`ba}Vp|}T1tt?unz19XvM}0|*VGBsqi9x;uR@o?q~8y0coX^M zkPWXoCu+s&{jBEf<@sh&6NMIZ{A&aJo0|u$k&v|D_+$ruII5(j!y3PTMZ#ekmtIRF zOMhPK#+@v~W5F8%>K#YhkOf%M64fJD!<_4fmIP0DmqYHGQ;MX?jbQ4ASq>j@hW{SI zQ)f>LuNM**6}6<)RmSAPd&!ub7V}zL`+Iur6H5K>o(x`T<_!elxf0nw|LYCtNdb>y zP^E?LNdU#p?~jHii|k@_^FnRK5C8i*f4ps`A$VgO-aq3omu#ZC<)^H!p|O3UaCS(-~U?vPTAX^#2zVgeRa1$wL-UDfB zHeCc86vK|DH)v3Ch)JZv>_Y5YpY(RjIFNerhR_el2|M&@gc}siX$I)XpBk)z-KV5Kx@)piOwRdy` zU+#{)C55TG2`zx0ed-9&*%-+=Kpn~@LqVNj9~Nlcq~9^vp`#TP++00{iNh&iS7DtUr+_p($bU(p&=KD z+Awr1qGB@`he3Zr`|&m`ScBzj*^>w@VSewD7U_=?5#_=fhQVQB*-C?gg(lqG-0+0C zVx3l0Eh42ta6IB9vru8`W%k&h(Wuv36VMuFKS+k6o?cwwKX~xg)s+v3sBE7{?syi? z)S&*#Q)0R1IWD5!NbOL$pTnoH;uY)e?w+q%pI{)+FD5RodxDrDkS#2>M4Kqp$C8L) zY;JG&Ei)YaU1T9B?cq=}!O?H<3fWG2mg#PxUs(lJ@8p33HtAjOa`L;*>A<=mHXtfh z1I>Ki)2rGYM~zSEr8bb+n<-($dmXp-Cz0ZjV)!CM{F8 zYIbfUSE7&QtTAQna*QacPvNrC{W!y1T-UCC0I*YN8) zPz;{Sn*DRMJ69pk@hDm;Fz{*#?F;B{JcaKlWuLf3{R&t4ROUd*h`>wR@?`9u{NFP{ETIiaZntB~r#BeIWo(4m` zp>Om{T$(_IDXkAw%wr#~+cKu<1zDRoWhy99o?;y{nKf#Ys;80FLR<46doaA zVZ0a5nvQLZMc}0;&ozbVcI=;V3EM@@U|s;x$O^!o70KAKmAdFVyAHHEL+&sQ;S^ya^N zaq%iO(h3lila=1c8p<%N+y5M(a#L8o{-9C$PT162r`7MJ)uNDE6EzJD5Q9|ps%98- zwRkQIJ#MZ|feHj(pUfiTu?=vtSzSONq(6VA{}KGoc&>pT1D9NHEMLWOY(K-eEDH(` zCfV!Jv=&gD(PJg3E{he?*>nM?*PuU17}NnH(2$E7uX$D@2bAKsKZI+#Y_kiTu40Vj zDTRTiYh|(H63_3#AsR}$5I;Ex+R_`qNu0R%^#@V~wF<`P1_yDKh?Jz0dB9;|IvsDk zZvWNvgJq4_diiXC|qT$SsD8=K)RM8DM z+W}v{>K|`SnogGbp3J)7KEHHG%jn@r&`|hjhBh!d8Vz6_e%W)N41P`K7Hy1N+M(eiZ7qM{ej%6 zvK0xBOo|#rz&gK(zu|f-EhhF|E?c^Z;@$99V*V^}JM*5+_uTbf0NOC^yjd^}Dj9O^ z(CLik7&eXU6?`?&m@m>1Y0|BXidY7b)k3L{zCL>SrIW&C`nU`b01O<`rn$LPfHoIa zS26U+T6Sh?V`uAK4&X#uQ!x%B0ZQm*{&lc)HrUgmma$5wgO&fn7+?igRU2|m{p)&a z$T|esQ&<|$BVgvWUsK)B138rp-PY!pmRf(j^RHS>adEtVFpX@NpJgK0>C?+S5CWN_+3hG zhu;mmV>mnQDQf;%kxW4`#a9T&O zNfS6N5WC@n^tvSXCw z$JsRtoAH!SdoYobIB#a=)f?FNQm(^yx9go$wkpVY>^Hg){0axEca1zCX5K+r*?|H7 z9CZ9!Y?6<8R_b;f`4RBw2x|;=NlD2)tiS-S*VSm!VGe*Wi;w>kD1*Fe-c+cm$1BW) zhs$fs0TWWj{@9EGsD%kbZvK?i*>ds#J^hoqo%_ub;4yU;ArV^eHgI!HUKLkX=NU;(FGL1po;QJ*v)#ZC6)_sIn1ZU z07Y_KO?Ke2-+Ba2a>bR7;~6}*db6;04KTq(4zopoj8D(btd6%-Abz+M0}XB$rgrWJ z{hX3w(i)CRd#)2qhL|}`QwVuqb+(I zaE9SO01W7_!+C}*ut6XR5sXT`Bj&Mv4vf8Y#RAp3g8^Q?y*7M~?>+VZl?BMxsEq+H z0hTog>hu|)8^kZPAuy;J6+3%0sB62R(E-WKX*pcfdKBC;7k~>$Dh+ty6G}?T@yj>f zw@d6c6*ZmLsR4s-1r^jSvy)!#F-r-SEZJ=E+lqUKOWl51pW(i(fl7i+3#6y_-z;){j z%lX$aELx!enNZxEV(io%-~jhhrOW`Hy92(?;npO+Cpo|KvdIo0weYq;e5eyr132AV zI*aKQ2U6RM!wn1k9Qc0OG{_#*{N&e zMHIBsN%I#wjjJ*q=W>PnOlnZQ!4!Uo>s~w2+0?7V{_@YGK>+Td78?$xsC!|41D-w0 zAt-<7O+ddenk?1l9#hV+rC+{-0Ll$)GdwI*Z#kU`CGKRaPQ8~&x$1ipD|-Fx;ZRo4 z+LRRhABde-{u4m-s6ezJvRepH)Euyj8$6MlES}4X(r#m9p|BRw0;uuHPCw_I-u`m; z$j^_+y*cZ85SG3Vl!l=)Lz(lFoz%QOu+@P;vjEyIQhI+drk+YMh^mL#CbdQUGMY3^w5k3r7#KNWCXowQF zSvl*RS2c>4^AMA(#OZXwpP1L4(fc-b8t7g^A|f%h0|3)1y&e?m5kaBlKz8`2Pk+4K z^&O*?eSFTGi==9WkB5d`g~dey7!`9$m0__i8^Zg4;Bd&o*UOAz2zER;?o~St z7i%|`9_NRMRzS>v)YDDgk9MDo%&ZbBl<~P(qNzZo%&-4uO48JnQSG|k*9=y|@y8`*XTLo7I6ya*ukK zadVMSQscx_8$Q1aimFtNTKkeUir}@`dR`a%9UXA4P3IcwyN-8icLWF-)tjJZusC)T z#RfR-e{-{~$uj?mIG`A!*o%X{rKLc zlg!~;T$~u#iR+Vjv;c+L04Aae?c#5dtu&tzla$N=w+69YpYm;!3q0HC_uH&;Qs zdjfo|#?UL1@T4fLzHn`zfV^=j1D zA|kf|+~}VpE+f{`(!wF-f;52wy?b!bTOkP$4A`?h>}GRHD&F6>W@;-ZUPAi*n~#M! z+scRAfzn>$u%n3-PUkr>RDhezmd8YiV-Sm>DZq_*4^Wyn1+gS(KfAlT+FM$krAr57 zXEE4+2YRZ^G@HIbP;X=WD$;6H*9VUS2_Jyi1eh4X1O^2Kg+X838)fB3C@3iTP7c_( zCmvN@Jf)q6cK@a9Y@hrHKvF@}0X^22fFgH!k|XZcV9IXjE4Ophe=#+&!UH-1ccL@ofn_Iz|7pGI;X_HJ(F@kmvmZ>X1bWnPTl+Ejr$VlV7LOiPk0>=<^6d- zhsx^e>lpNi>EcTfxC%OL(2c&e^!`cq`O+KJ)#-RCn#gSycF#$@4&91*AV>Xj1{}2` zms7DsXX$oKk#dSj8{^j$1-FOgg3Aii*B=N(O!Edpt}hmU;SyWlPVCmBw-z1j9_^0? zp12u>} z~SrRWNZ@7<;PA4(2@%09R>t);bxRWLqkAOdSTi08kB%;ARc<=50ydQ68c#F z37|^NuXqFku03NF>!R{Pfi#0(`!ojRfKXm6trPbpa)yCx-Uon7t+2{DOD1vPl}(C{ zTc5MRU`jv0Rl%mT|DbLk6wD0|ry3yYs$HuP?+_mI*RBUU9`o*?cFF72qE~~W8!&Uf zH>uhNS!7Cjl`xz{O#!NeUiIdbLRF0CZjvxvQn6s7K_(_Z>oA?D@{%Iq+&c`(o~$ya zDk&-P9g96UpJR$?{rR2{7#u-(0l;o z0wE$~%NGqL@2&{>E3nE-2PC&T^oh)$JkV5MLRH2p-4kw>T@_vfdGO!?5(9b`Ad?60 zu2`AM`IG2%$@IT{_s)#Ug57xfRvGur=Maz2e1iffjDX|c#q1G$Z8Mw9>~f3Alcn*r zwC(62C#JH__Ct1ArGu4zq(=%tx+@K5$B*3l$T6oV_UX+%EDrAmK0baEyO*4QGmth# zdpdGycmH_t_`GtsFPk`TPPspFDTT3kAX6fi)n-LfaYW@!tzbo&6iZ=Bng|Mm*n5!; zOi=ue=M3d)?aihD2G{mf8e97m`XS}2d58)ceS9^j2K|0gUF?>TZ$?lt2q!gT&i*2j zk{2q;?|fJ+oy3I)D)sTUU{h50n`)6n7U^FZ-(}~rqpkv#XUVu+Fd8R!oSd!JgKev7 z(Ex5*0eU4RBV!0l!}GZ+JZ_dWC3XcnkDps+io`oM!XQ9{#JQ)R_83)a+Mc>Smnd{} zaXQ#6YD6tIyI2)!xQzG|I$z40e3E{X$Ujkfv<-`$pVz+LztS@LU4A#1h=ti9S;1+! zIJZVn{+J^#jcA;OotqR647?2t!z=6w#U z!o%y%GWn|>{qH}g_Le%xn+^)z@VQ+a!WaC>4SqGfalP2C)GuV=;hB1>FP!0ABGFX; z;0P1IQuy$o0DLa>GO<`+=N7R3N|bx#=Kw6yM@TsJ1c@EVBET&IS>M`yxkqf)?LJR{5sV(Y{2nmCIsYF9xSRnX70`$F<6g3d9fkA@N1nW)wyCTUzrG$E)RnSLN zl)uMjP{4omGd1w$f3^PrasX6F{~e)E)Xy8r#YaHKguBQ2=ZJ=pj|Jk>E^co2He6xE zv2q6-ykC`2e*<<6B}IJHq1*!p$GPT7ih;$gBthUOt@oyRFs8YjAhss!{m-5rOg6aj zej||OwMTph3ft+~`Q$kqX!*dB<~y8!_Ydqa=BFtKkoBlFmGDZ!nwpwqF_J1{IUBFf z831+ikY4U(QRqWs`LWhX!*2A;(?&2UJznM&tXyBG_t8u1TY-UrwuotBPiBqUZ;tdY zl_m+9RJB>-G4nYE1X48lT_)Y_t*z;;CL<2jgmO7+)xBM|_B!uiV^cFRVgFIG%x8Fj zyzcp@5(LqnYj6Vq1x~Lf|N877fJ&RbaN8;U)}6xV0P@4n+6RY$>il^$*S9SARZ+t+ zJ#e*rM15X?hXVeHfrr9JSvPU+>gpQz^3!bq9`4}aboBRs1ysObAW3DhR7XdLpyV^9 ztnVcCJje|>9akG7{~q*j{`!GNVR2T~WX)X^4R@_K+#!c;N>P~6+o<5Z!v zzuK=``}!A2`vR7w&xS#3K&TJva<(C*QKR^t2V`XZ05xxqr36HU&7c)Ba(L8D4rxG2 zJ8V8Q1{VrD-W*v|G_U*%R)xF4UNrTnUBouBAHxt`}doSLbt@eM5U8|59!cj@g`R6a<*Rb8tM2fTciN_SZ8| z`0uLR{{o~5fwMz=AV$4^|9)Y+a;|XVD-|U{iw=sz`Jpk$vZHu5HhP5j651sfR9O)} z<}g*B-`o#bEjHMG4D638XE?p|fHaR8K~5Seq2=Tf-63Ko5!o)(kN&}t__;?4HJxmU zpq8+-vRVLeLK1msY{c7s=0klHa<95#Zp@3Mjyj_iP($Emsq1J z)CcxRX{3{sjT!-!`t`NpKeF7moYO4;JaplpRrnw&dGEa-HFph(b!71cCozE2TQeEc zZFP?wxofaS6@f7XdMw$@SL+-?+`5N!xMVM9>ujjApj9upYK?D$9$#3F9vJTkgC887jukQzMm(1B;#+NKwYy+lGu+En+qz+&aHTD%qZ z)j7lh*GEzc+@784hWYyK zTU4aDa9X@@>mJS%0ReK)=x_#n&#fAgmX5yaSBOeojHdvzDnY`x~^ArHzfAeS+RIB#3J3c*vc#(=P&y z(RMDY%UeM7Z_#4~a!F?uZKu`p8Xgcj)q1M znYCQVk^v7ksKmA18mP$LdBF?-urOk2-G2S|X82SONJhQ*)Nv1Kbd4C;pQTN8t^9*O zKB+k3iCnqelM_Rrew}4iTFj*&t5BWm*LmKxnz`y=bIMLb3 za7AXb{*9~rud3o7=CgA`z@r2uG!{{ZA5)n3?&TlLd;%e>1?sCPq-g8C_E6#9JJ({= zs>Ib1BG@EW3oX8HWA{LOXw;UD8$C&kxKaS1#flR2&1JA$ISvlCguT*U5Fdn#wN~1YH@+<%m4RQ)nZIC$N_y8@Z)9)(@ zh`$swX-$Bb3G(AWU`TtZqF@n5RglNvLY`l2TJ=F zpivApxVii-%LKKUlLqwwj1LJ43LYb7u$p4ET#XszkeAl*#?QI6IbLMg)`bU6RjV|X z0>%v2>Cu}QW{sY{_*W_)4biu+M+TshI>VV;U|pl1(9_e;l>-%cN^@tTy7kz3C`}k* zTazv4_2(Px6(_FDfM@}$rtQe~#4mY;9)Gp=?)G0K@$vb#U#MtkWHabiPtcPdsoGH- zOZNa->fe>QbpfuIYyew?BHmUIJbI+Oy+bAc|Mo~{Flc4PfenF7GbtA+GHW!nrQTc` z0t0q_&HOzI_=5Vypcp~at1P_=HEQVRbDx9NCsrv?bidpaeeB2%c>-$3YKj|9-l({< zGY`^Vgh83U*^O{I_2}6nCIV$_C_tK(8;IdZ9dlZ4DUQ>D9Hg-`va%l3a76)K;Q)9e z`yiz-lx0RDaK1)$yfcT?m$A&=?SrQm^=4pby{xf_n2$ZKD?0r2{M>qf`TZ9f^b#;I z2DARB(ST42!GZsU*}$eKbGxtyD?E8PL<3x+ci`~@Pn{Wx-3?Bp?Cr_)VG04)IKi;9 zS70Mi{|#BifGBv6LKeVy=nY`Q{BM;Ba=0^>DoXAIHZ_eUe4jwI(pH@PBxVj5? z3s9$4Kis7pD;cB<;mKNQRR$_YlEta#Dg!J5Q)F<-F?*Jjmy^s zLb(zO0z5o5P3vHPXC{D5VuUdGUgE&u_%uqAH&JYbhNQ5nyXC*5S>XFO+y|+cd7B35 zpyyC4aVmkBnwYe777$`w&nL4XNGAc=A{i|ofo$P2$SOiv!F7H5a7)O(`u5?{S-JEl za4daQu=qnBxkvHl#{UAJfS|pnD>}3A&&y_l)CrIP9&u?u0o-O8loN<#Do3*63SaAa z+)-Z&eAye zbsU?ger&B@qTfpx!>IBF1djpB%hZ~4Pr63fR*x+iAbWKtoFV3w;Q*<+hI)5jpPtGo zE2M?0B_14j@CSL|$?-I`o&H<9RBmtrYgt~8LrU0%j34eEA0tVnY2}PB5DiAg=+(srtiX7$kQb{|AKal; zN{aN_;s+qgm@sHfT!LM@+qY#1gzN7hD^*8&#%eOFf%Y1}OP~P)k_`?-2!&t@cpDg> z^Q*1p1xau-lM#O}r?*X>#8fD+o?4N@bcqoOm7{B=>PJF27iAWHI8nZ4aMO zwfqh+$JEtHmr_VO!_!3r{)mTZLgB!RvyNskbqC-)na2)Qyx}EgZOV9o8t31iN&P?B zn5naAl-TH}N|}%E-o4|toQFW99&#&4)}RnzG;(*9?&??f5OBI$6h%bjNDitGj$SzZE@GyF1FzA2h!`k#4Bwo?c?sayTbPjL?6EMwd0-IypDyxXWy++}L%0ofhN*1Mq33cPD;!o*w_I z)JF`0xD0@{O_P&g@bn%Ig@F1>%~sBLOWsu5*{5$9WJkFU?=bU@So^8HFC0Xvs;PcJ zL?jAkIsi)TVTVW!Xd#k{4Ey4mzj;1A+#Vk15YpzjL0r3*oM1s3&i5H=&K%H6JG96E z3vBhrrq#AY2CX4=B^%g)r*;J_P$3;mpbVJWftI%5bwQyGVusYJv8D8k(?ZY6-g=rq zAVkr~-vtP6mHF8Fz#Q@qmOv2GtJCmiBo*McS$$z6f>^lgf9sx3YX>&ObgDei(-Q&# zgtF}PtUX_?F_c;&_C6o`BTphtM=#Jk4i;)~0|UQySCId&4Euv38Djz>bAX{4wwAM2 zi{<3=MpaiV(f%2^40knK9;r}Mf;b;-w4cm*q?%}MaujeUJ0<{7Z?ix09xOcCYY@t; zcRnsn(A~%P*+t|S%M_U`O$Xg`i?YgBbO2EvIv_~hd-A0FCu$4 zC<0KY{|O~oM41K;Vk&7GY=VA*0O#U6aQ$!{D)4Z7};J+1?U43o6l9U#d4Xk-ciY+A!MRyt$( zq2=fY`!2d^p`evr61PlKdfsWT;(56^7}6$Cg& z)T+$G5h~sM)!bm7=QqXOYGdx@hohi)T*!zQf|hpJP+6H?`&1Ub_BiRyRtRhzuxokl z(S78$?Lqc5fa)#ntf)c!z7|mv3Oh%aX>V>f+TulMSoSotv1cn%`*MC!M-g5~D$&o1sbO|xA z8OlF9-Eu%oa|2x$GEr~B37#R;gL~$t=?WPq_$yi^Qo8}nQ4}QDSNf7$K~SAupR6bE zr=`R>-FphYfDck=h)`a{lb0{?JX7kOk5%sJfWiU26obl+JGs?5|Ht|&@dnqfA+uX z7^D;mW)iBiwl6+YK!9wY2~r`^C7Ak(zb)~@KRaV1x~*h%OH?0Sc4-6I*2~`?rmb+4sCN(2t{_pYZjEClwnV(KPd&~8} z6?+u?yY+N0Pxk-_5*R;3LAyPnY3Shyrid^EX7{bUjzDsFQgiV9f?|A%GDb8i&*M1F z5}z&sBsghkI#T+h-ve$!Hskx?V^!e8!9o-zGI!#})0^!XH%oc=kIuav^HL{YpZh+~ z@b62u$PTeK$lt%k7LYDnINPnhy*8owCcY$#CX>egwwRjfYuK}LoGzjmYF8&5G(pN2#Q3F2VD%4TjtX4se*Act94s8IIUr;e5>4p zXBTsCHGDNEx9xBAH#$>Y^D)+i&tFnnu!b0Dypxi75pXDl!ijqJ7J=|}z}QA-r=%JR zs0*f#eP>?9d?EVQBS*~Rp(WLX<*{+7&$Vp$_1XgkAxY$LL{_H6$crd2+Ot6)5cdU@ z`QEyn8>QC|2@n)y0zttz;Ec9EqY;ktn*rldt=`Xt2;TQf%&d zHjB6bpS-6SNh{d+;g*>K;PwCTGJm{H@dN6>(q6Iqm2>G%_X@J09FJKgu$aGg2>~F z5_rL%w9W*OgJ57ZX-%uB5gxpw)&~X&F6TU;`-b3d0+3be>f)pf)Hd_R+S7*i%cCNX zZJSj7YLJaS8=cZZ#$7P6uxbm6=+cEy89vxZ-rjmpQIsKtJc-?MlC?SsjrrvnQKIB- zKEOS(0)ZaL3zq@YPzCZ$sF_DEh~f>H&oR)`$AK8Rr$;Tr_>M&?#81ceLSS`(8^Wku z?5Quqya|<*6AARm{%-5Ze|-80`~=JJ)D&iul9qcr?@rx2(29YoOUmbX-xCZEev6JC zHG^HpXifUZhKDz2r@CV{fhjb51r6}CEsYnp)#~z!iuMe=yJ2V$WZpR>B*crNF2G0f zgE{Lm9A4r+<4mZ}f*g1fnxb^t#x2q*n|u!Y(1Cn@U}6hAKPX7{L$8<`Whebu-LG2) z-%CpB0cnPRwr$NM75C<%mGAObE8qz~VaRd1?2HT_Kfl}J;^Kam974~OzdW!E4-e0$ zQ*BL1V^?CTg~zB(RGS!v!OnOtF4Sg6XK{~ZKPWdLWp+@RF&kE-vO!YXtG`;tZoF-Ad^=>#o3TQ-=Qd(A4c|l%ENB*~D$RMo6` z?o(6E;04Uv!pCAvtfX(<1J8jdi(|wu<8K&eLP=?WzwhatM-ja7-hT+sCm|pp-p7q1 zsa^N39f6RZ59X#PiBZ+p<-6>yKX51w2slt2^y9Fz;A3`g`y02ev8XetmseJP5B=z! zdJVE*55TaC4v>{yPip7%k$FetWH=bBGp|{vLH-59gqvD7Km5sc!Ng==GH)!vAU?&% ztdD(#DU!l=5US&rBw{z}FK9;&qlq387GJQ`#senP=m9^u-e;igJ#@S7wh>%d3KLlI z3n2*z3|#;sgU5ih(Lh*{ z!RUzKZk{LFZ8G!MAHWTsU7s`#g7er-|d#6T3MF}ZpIV5EH zUvEEMVTl_AN*$eJgJ+oFS=?ovD@Q|3cwe6+DGo;U;L3jUEbe*1xTR{9C&lGF#X-uYfaVhPNPB0=r7ae72#BpoAT+q!M3>zOsk-QqNX-2FtI(<=a> zrX82Qf~U*3W*0NWWQvNzjM1u%;dR^QtyJpl`5l)8#xlW%Znl$cSf_1mB|JVlx*cSR zxYgWZJg(;i>6jSEz$eOqCxa}0EcJ&Ez^^i;I)WrIiX%u5J1qv%B0VimP9pzSlqO(J z$GtMdv9q&_ijFP;6CDlqEDtPo90Hx0sHVNSe;8;vCxXudnm}54dDQv2v$%MDK^k@= z?6teQ0AM#&>dcs!n1$7vUb0|8fvf_mu|%b($3{-}=>o1t*B5lG)2*_>s;grdibe3@ zN}>e~m{m=*Xo#PfnE0TeA(HbABPqM})$*IV=A;h?J^O{JF5m+zk6d7aO#m=CT6DU2 z=Z;G5H-a-8d^Y|v%nRUA@SYY-THLUZUs3-<<{svN1w~r~qfAo+%%ztc55u|PV zzm2Gg6n(p$WbpHm3Xsmz$$QI6OP$qY!o!C)IVhX&|MndAKA>bxYT2Oi4iI}nH~(yn zO(Eh|Fsk%U)H$*;PdsC$p5M1%HyG2+whzw z<0B)IJvv2HN6snB7)JUsGBx($m@FaL#x{+gV~zF zZ1(>{K!>ks66T&hyLvyKia~5=FP07`lf^#w;PoU$iccA$B+7bW1XK?7n&L9Z#{Dh+ ze{V9Pf>Xm+Fu?aRSjvQ6?6&R$pgu<`=rwl#o2(ZK(1O2;`3$@bAN``uiP#1gYWG z!wld;-r-f!UDq)}yjJF^f;BgXXJ%&pr?PUlkCFbwTM|l{U+QAHV%UcwZb3Doh)3eZ zm6m?)#r+#9m43Ch@K;AitUFFc%d^APY(uVpU?9j=-#Z{cO;b~RAqC${=4|#Lcv^0a zJ3*5qpj=N$N%0+`an?K-2>-heA11D@)}+4nY#Je!fuv45o6T}C^?!b;^NdG5(l-}0 zV3Gh8*gJGAIMZxw_Vo1hL{1nCFP7R5TUojrtAIouUgMSoUk~-naZuo=3woxUHZc)e znF^!R836039y-Jw4QS{daqB8R+uYK!;xLCBxesbzi2?yWC)5JWHv1;(z%^4j{lJ<< z*tUsWmjQ=7f6D=4_o>Or1>wPMr_|K~XU_+OII|FR;Wo8Fi&{{`+XD4g2$p=DF4IjO^?L_V`6m34T8@ z{&cY?88l=XCF-?B>C$$uL`!rSizZmh6Du%*S)m^h1b?5GGCnFN8Y9ku&xTUo&9&z8 z^nH!(ddfWHU~o8`$LHJF*$LIhCCP$3EW{Pi9&l@PYN2zMpmzK?t9J=V%+_hhqe^D8 zSyZ5P0^I6ecVDoOnI>SAICaalEqBP_V@Jl*O!vD1Z9ZgM;b|~e1ts?ddj>yVl7oPZ zu^Ox`zK$^~A09ZT1cMNz*DDM*R+P3wm+Ch6D7WXo4 z@nyCjCnh$^_{==rS5Jwn66n>g^&)OqDyO>1ZPul7Kd@T&7gbednKKZQpk(qVq-zQ$ zy;VX4!+foDmuC1LN>u`kR`Sa(uC9eQzDu9LkJB=1U-AN(X z!koZLH#axW(I<(fw#K^2sj8`+@SoPE)9D*CCZ?vri=!rcS`Qt4$F#C{+0LT*`}^~F z{4eZ*{ueaH1Sh|!u<+{2N|>5u-fZBp)nDg;9_W;_vl6cBUgzN8z8a{g7Kuc9>{6L$ z(w8I$EC^{8m@UZ8V!|7NKO)hg023V=?V5Apb_Ls4WMfSh)7{t z(c9k_9#qm~3K#&Wf*19LBCj#)Hm|far~XiL%$3GA`NKezSzTRylKnBv00sj?G+#se z=_=02gfHyYFatJ;CwIN!zKQ(LRfCABDUP#2sl!T#)|&-zIoWLvrL697d?o1$K4OeJ zb2coZazqq(ycOn-ChNV(H5L{JSwcvlk*EEO%&(DaJv1Jlm#$;Di^kS@==eG+Ik@`< z2Z}ffpJ?})Ag zMTPkoC8q#k|0fyN7itLZc`p!`X9a)yU6#18V1G2~OGC^tEshHp2)lv25}f* zdZ^}5+ZN<8Rcp1C6{HOk?20WG-6(KvEKvtcTm%~{g4kk{_2=`}LB&mVR!n#BN`y?$ zZ@tdp@?P$nQoC;EA@ig^g{s@3&*V90THD%IjMa4RJoPYwv8rZ#+dp6|rmi-n zX-f|d+hnOm*YfjUevKD`Hjy3GA{&!@W8`y+BqX~Xai6i`&Q9Q+VKVhq2V<%yJB}uC z6WxweD?%@1RU6FTZaHJ(iZ8gsF&{4^%!g~>HHLB(WFn15zICl-ILAEb`>0%7B%Nlh zuG^1bFu2+NGG$-J#Iasw@@KrU9z`k*l9-S< z*`ectgI6Pl7i95b?D3UsAqNY;;+mQqOnsO9Z!Ln3i46lpWXxs9xS^kLn!=YV8LW@Q z_1P&mBt}v`*DsAGOmfOL*fd-6;EkthM}89>A0Hnw5IRE(QURmSpQNGz&svOAtlxri YH%dj@-&@Lq{=Ja1CKhPsX;;dB0in-0hyVZp literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/createmesh-inv.png b/doc/salome/gui/SMESH/images/createmesh-inv.png new file mode 100755 index 0000000000000000000000000000000000000000..8273aac4524a59e52c7f0048d705085fe064fc9d GIT binary patch literal 19908 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

`og$5JK|7>Zk64EX!f!iE+ecz+h7quj8WYS{RL z=D?x_a7RDuJ*+m4#3;>!1Oi*1YwHD3U z{@V{dYZj038#$vgn3?tODDb^L$2RGSAogiMcDvfX)eoT<&{bdvDt?<;cV_kLyS%x% zxzk>vJ`&zeAN`o!)_vqEaJ^A{9{`NQ^tm00DS&}+!s>~3x{>;QhwVB`vp`qzF2#Sa z0o2#8a5{;8WMSfAkWvBWVJD$u4e@Ry(4efvNiRSwi{=87srQY!OZ3AnBKo zhDx`lr@S($q*^$$IDYJ`(}S`xCOlG6{9lN>qTZdRrta z%L4rET>_wqva!;L7&qkq_o7h=XT;a|+xrYbWm=LfC^(6f8&(+}Ph)#BQ65u**@f1 z*B}6v{|@#4i2DC1ww$_1+CL@nX0C-pIRrI|lr4H)U*5EF`a%xBJ1!`@`a;C(^b-Po z?&Y$}BkF093vnu7_D~`Ql^{S2o&ZAne=GhCYF%AQfOXb;j!9`mz%eJ)E=Q2Y#zskd z-JR#`?3*i{!Gbh#+S7@*;zLNclgst^*T|pp2B!;l4M0lWpR4J=_A`|-CDMl<*X?0f zb!uyC%epJ^y$!?vreOYrh7h+A*Ofa>5pdf0vzg?Nz3NajzhxHOJ7 zCZE9;PG9D1Ummaf+zj^boO`>tx~7Ty3NO?pB*t^q%fhdRZ;4eXz*G zC+yGI+1XPwW($S266R>ZYin!IUvj?H(gK~~h-sI69T<2AQqC5Yw~%25baM#xQoBL6 z7q+IhCJCIK5HQzFp3MjpbK(RC?(W(uX9{)(1Y+JO!xj!eXZv$Wd0mXArlvoB{4g2s zkfex}1(fB2??MnV#n|tgih7RlB+er`gY9#)e|t{_s&t;a8y84shU{VqEz44`G7JtggO19>eAa=ol%o5{i|YXl=pOwLMK!L;py zv)#OL5ngq9m7&lVj|ig&t*VA>$|*@}lf7}U27-+=6UxI?}<(cJK@NRXR z^L*r`qU3WS1GN2ax~<>sA1m)Z6jp9a3r)#L)S!8n30E#0nUP7Dn@dDY*O{0vxAPcI zprzG{h#uY8l0Xc1g+A2%bMqb_2NU;#-UNMhz6e3IE_(s^n`?AsUGIxE`@tD`xYiefdJBU12l=EbDVNHd6rfo%6NeiQ=GF0K(JLsZLZjfI~Gkt*@!6 z6gX$}Zt5CouBU{SD)1cyTejx~>8K%r14K^kEC zyyV($3n9{SavExCk_d5MARG^1lC%T9sHOh(XgaHt?}O4ZGQi26=W6ehmi}STU*>3O zJiY(uQNL+brTrfs(0?f?NDc11sVU74u`SSOnVp^<6%{pS&%z>%(`ppoYin~yum^Gzrah(49s_i%z?I)eH3rb# z;>j4!(MT$HFrepnQ*T!bAB{OOiBtj|8Zm@@Nl(|?Ru2G7lUnyAsi^kbA?7E+ouGzz z?yD1lC9}Ig^p~&6i9CYXHFJwLave&BtXmJbSN|etYHG^z=<)@e_Yd6Qjt^{a*AalB zM0dLTcp>(?xV&5BeplMB(QEqf5Uo8o=u^xG&>7*B+n3^oiyPO#d6j#d8s3Du%V6cd ziN>h;Ku%TnY1i`G?gNUfLkPUg zfFDk44*iD9#zvLjHW<2>q`wBRo#X;D#;CnAXL8 z-!jbSg1Q8F(t=~?$O*twF;Y%RFBUh%tb@tIF>cfiV)NeUlx6mi0iFc&rsaE;MqCqB zYV+O#OEU5Z`#FI0LhgrEzkk_Vz@oXRTZsAmB`o*e$LUo`hfJW6yy|&bo5t&jz@;Aq zJT=qk4$X|#Q?XUu`^4V%;35Ion{vSHFaZ5!v~NYr!I{keP#f-H{w?02rhbhjfw9l6 zj4E|=s58H#4K~@hkpYnZyFdMt=vo=UFG-&O0C#?FBYb+&0i1iDPThGgw%$6joq1+}u zH{ede_oCo$cZw(o6v8o0tzC!Q5_#o17O_?%RRTyiqU{dr@tLg@s~v3ja5GQV=TH}L zOF_W-EM9d@%>>4KFqj{iE6a@7V=wo)=n`g?pjB1Q@em|MyuoaOVOfFQY77 IE@cw*KQ0$7ivR!s literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/dialog.png b/doc/salome/gui/SMESH/images/dialog.png new file mode 100755 index 0000000000000000000000000000000000000000..12c7fa2732c3ca5a67373f72047b90ba525379b0 GIT binary patch literal 12043 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 Hn+E;|P|6~# literal 0 HcmV?d00001 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 index 0000000000000000000000000000000000000000..3d01d66f4bd837a239c05aa28dc0a5eadaf27a40 GIT binary patch literal 12502 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/distributionwithanalyticdensity.png b/doc/salome/gui/SMESH/images/distributionwithanalyticdensity.png new file mode 100755 index 0000000000000000000000000000000000000000..87ebc5ffe26bb5796136315087eb230828572be9 GIT binary patch literal 27728 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 literal 0 HcmV?d00001 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 index 0000000000000000000000000000000000000000..408480ecdcf1cf2bb479a9468e6f9a3b54fc5415 GIT binary patch literal 3185 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 literal 0 HcmV?d00001 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 index 0000000000000000000000000000000000000000..186528ec7fd1a61cf89fa67ba60805aa8420e184 GIT binary patch literal 5036 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/edit_mesh1.png b/doc/salome/gui/SMESH/images/edit_mesh1.png new file mode 100755 index 0000000000000000000000000000000000000000..4369e51b4809d8383a18631b74d197a63e99a0ea GIT binary patch literal 27435 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 literal 0 HcmV?d00001 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 index 0000000000000000000000000000000000000000..7dee01f7d2c14deddd93c2871a15dd544a565aef GIT binary patch literal 33103 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

QzTI$zQUd1MWiur_-jj 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 VXKHRkfEzlM&LacOQg!=x{{v#5-MRn( literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/editgroup.png b/doc/salome/gui/SMESH/images/editgroup.png new file mode 100755 index 0000000000000000000000000000000000000000..c0a50f36f06bc6f388faec3c99237d44cb888be1 GIT binary patch literal 29322 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�ZM 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

&NhXZkMR4NH=lC}o$n(wD`NXCZCYaS!hL>hK!P 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 N0{ugNYC0Zs`G3R7+?He1 z@+6W4A_07?J=fD}N30 zKBXRzgdkW6m}5{h4zMgzm?#VMq?9zYfB*a8vS|4v;)9Xw(=Rj4krq}K!k!O}vj@*N zVXB!jR7BAV4!O)VDMIK@(475b%zXQ$M5Q`Mu3GoDK6z@mBogvIBv5zKN`gMFe z+w){LoAdFOI}s7Z6w=_pzOS>z(R7!)-#y>)B)l*v7|#hTIZ!ssU)n`9h)IC5TO+!c z67rw$CVEi(ccnmqTwhuWD1Xo*HBkSPvmgI|Z;?7-nlIId0m@S1gN*2Zk|WjmI{_#^ zsZeYG)0liQa**!7J78Q%Z~vd(LOn%i(DUI+Q|O8q}pA?(j}zfQ#6ehatf zz?%|T`9maien17(!veYX35{`?

nK(ozvH;JeN<##AFhQy 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 V0@r2-s{<>~<~k8iy(h*Yfff%<^u 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/eleminfo1.png b/doc/salome/gui/SMESH/images/eleminfo1.png new file mode 100755 index 0000000000000000000000000000000000000000..5e2c2a0c00aeafa4b2a3259f38197f264e70b684 GIT binary patch literal 13974 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 B5jX$< literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/extrusion1.png b/doc/salome/gui/SMESH/images/extrusion1.png new file mode 100644 index 0000000000000000000000000000000000000000..b4827824252576d49d56414b9df73fc99e954d92 GIT binary patch literal 23388 zcmdR$Wn5L;+V&?QAdMj1C@9k1Ef}P9gQOtMqDw$Rq(lj6Q97i%q(Mr$8|jdS1-xUq z_c>?p^E}V{p6BEH+aESA)|zw8F~_{eb^otx5UQ*whl5Fu2|*Cf<3}>jAPA`%f{^(! z(7-EbXm_a~h!%P*BdKQjYHP+*PtEKb`rcf^!j7n&9*+u#L(dz`L2~vcKUbn`^_Us2 zDb1k)DTOHm{5a*w>8~TsguPN-t+&|cznGRN%&6sl7=GuH^OmtmrWw^CFv0ygO^}PD z2}0p^I`tN(5lkq*$WhpdTM`KQiV#jnWMy9X?)b;{3{_-DmYx2-{)$y*{35Ju5c!=YpzLrWiJY6JSLmFP)Pu7%?k-`0D zBhZyQPdgo?mmMTOAej{>o#!f3K1)Vk@W9#C1zV?hXA;i!c|5VGFIc**H?c~^{i5Kov2hb0x#wl)o#e8qv1NHx$J(11f8Qcd7{>N@B?+L(jD4* zt(fA4A6doKw83+2e8G|I?VatL!n>`Clj!7RWE34m&s~b7TuE?}mdjCSdu?!X?KGwH zMx+>Hn!CDg_VxAII}S9dXy7D|l8rGZrw{Q`$!=?$*qxb$aLA#f3kV1bEw=Yg;nPas ziE>ATWXCu;Lem#&8FsF$%UtMcnqz5Olf0HNA?NiUHyo=ed3kxOT(-%fG^JfJdl>9h ztzN(ex#*kj<$;Zlg|$kR%(fbH+TGu! z9s5dj?VYmyijHmIa>qPnLP(Wm`pPIImJfUb6LnoJ0}bp)4FhDWdbaxR($jAeKvkZQ zfj4UBN<`KEW>MAECJdXD142Qc#UUXf=``gUwzRg-%f+1Yy+*;r@|6-lxmug3r`RDr ztkO{lH|+kHH`VnChGH3I=ubOL-J4gXjkAXH1xM93YDpYvZDEZzEiVsSUvJrd*AYkB zL-Sj4PrzQ0SlENOr}i7-xTl#_=w;$xOy)Z|;BquLG-Cm$8>?Ft$HD{zFh7GCQ_`&k zY)umM>Fl~!iR$X4oQpngo}Mj(g9IM+4adKbB>lG7ki0LBrFUoR9j@T+RRV(PawoQX zJDTAS#%!0`74&0ZbJ^LJCAJABuBDrW>P#IzwPopi%dIAk9&0y{r0T61Y-_EM*3!pr z4(Lswry}vs`<~3KtzX@vJdb=hQt(9Y{$yC*Tx!z?|7Tz<;Gg=WBdPV3S*8QJ6DtRw z?Oxe%H9TP9|5$n6JCt3>DXK_y(FsvrOU*2956_t&{%WzwZ6SwM2G?A^u(M(MG_F@3OLZ52R%zQZ<3m?4Nesb# zx+J~!PF}%X7&Bjis^8#!s5N4W#3S!7+xHRvI%x$;6Hcett|`4!>q{An4(tBqX7( ze*64*8>?I=oT72ovdk8G?z6s`q`e41{B|QD7N0S`*?F>2jG#Au!h2(ix3s9)u@G}j z&~ObC=&rrKv6rVWg_2f6F2Sp;YYj8`z`MC{ze{##3AvtgAcLa9$DZ1uAC-PHW|!0J z(Kct}+WlDpuXJ+3sZUYvhm8Z9uR55pAFicxAwl3J{PQe%nS0&@lmhsbJUUf10`sRN zR(014zEP!|nEl6ajQ-070?XWTdzbf1;mPi&{a?5oF1Ifln=`Ibstyle`7_6_Ri>!% zDBj#OsZ+ViL$hVWJ^i)WKCqSI23%$e~m*cAX8Y zp5hs<=g)$q(T`***%Y933)1|DgeuIQb5Z4a(m7*qvtv{_q-q5EF^V^x?zL;iaW&`Wa zRr&>zC$_eG8(Gp1)nTQuxjJ`3KWZAAo08*ok!|*bs77;hatm3hKHs*dDiaH)zD5`r z{(OQ&Dpi<^=GWjtl4$^;9`qH}y&fcmjonYG-oPoyJdzxZuc>@r{Y>L^XB+z0>!oY@ zE2S0=rz8fLb6Su< z5=X~NomXTw&1>ZaneA zd0P|}+N(UBlb+kA^YXSr|8%`4H_h#lKHhGtPg%V7y8Lu`&*gAi96zq%5}W<%>@K#4 z5hFCeT{&l~GIM?ECT{Rl)c>TSP-fuNAq3NNYOOxLR3U(WjIEX5O70#tb>Ihf(cm>R zron=qUHQUVeeP08U)!k)oa=E1hQ3q6R7COr3%X85K_KSjkf`l}yTahzzf{o!?u3 zsU|Qzmn-z~*>#F#L}9)C^)mn0C40_U1MZs)vi(5;*5U%N#?q%lm$OVrP^!=QeXrZT z#6RbLOs{wT9QE>_Pz^S5-=bT)VPWbGXSK5GLxO_vXd-6p6aqTxl@>|Pyh+8jsJ%Ry zZ#SxrM%-&WTcyC(yh4KZdQLhx2Yef}cGruZaJZUdq$H6cRhwu+O-dxk8FODdbk$Fy zUWpcaPBFX93S%{P?h;n2!k$_m^WlhH9;&)U>I9{hotRY3aln5b>I#U;4sO*1UGZ2= z;W2USrCX4n4Tp55s9T#Ms!L1;gHJ)#t6bg6vM`%>d}uI-F}#j4_!$kjKJsGEL@cyQyD8!wgMRFDK) z9KUYm{lZh$Wu8iF{!iDeXWz*>!fD<`{-hR0_C8`ggfYvll(%GW2{pgv)m@!^F%_O^ zH@5cGXcR^3`q+WRP=M^dCr=gZqA!uRZgkz*9?lA%o}Qi`X-us8Ugd}MNM11F2hD7| zM8AQ+(LNicND>Ov+27yMa)Q@x#%~DktK@IESQoOrJTKKMGAIh3Uz|1ag!VQ{I7tbs z(dLr-Uyb>_iWhW`8{}dwxCl-yT3R3oP+r`?5>KtwDOU(6HtF~@zCt}Mo=@X*TJ2K1 zns42A!AQS;dPahS2A1js`JkyvyRnE0A1r!)CMw&xQ7OEpW=UL0h?2@0ok4%vv?_n7 zxvh=Ne;R4yoi0uT)5fU2y1JR#NzAn?E*H{xiZcx=G`LT~;X1-UUVJXLmL9B;6;N8L zngK(B72#zo6bsR1aVOc_yiDe1Pkeu{t-S1Y;k6w&WXGMydeP>3e)yv5kdj`pt|d$US=Dd?JL)?YEp zZl4e5Q$~ivZotw&hJ_N##Zw{5+A99)!mg{A%ie_1&R!QwIB##-%k&%6E34^Y_ZH{^ z4R-?)A#-gQJhGjsxdF!7=W-^!x}b%B&d_d8)Hv4`Xsop(k51J2dQEs6eBv@!{0cu6 zoy3Af@A}B26o%4%W+pJX0ztgt`eL>ZrKKtt&_}MnRd?WLoVmLzEts!s+E;HH)P23u z)vLD0)}OYccPqr*=wDp;u}O`6v%p(?gjYzUa+Of8`s%QV^DD7iOVn>}pf+#WxX`%$ zlpnf2OTCuV?C(%^Iv`oI${nycrAgGQEWYA7Y6yKKbOozGZA^8>6Pcb#*SHS+^~>>a zZ4l++TC98dmp^R)(3L;zPxkzRgVDvr4gHr4iTF=bIMh$lBm>gMHj7V=f{uLmCN0;T zb@a|wFwc*6@syPMWjAf#rYYY$6tDem;~=Me;ko8|xz~Mw*X;V02{X*r=;4p4@wh8Y zG?94K1Sc?2ckgI&4m)6hrEl$54g$M3~gFRzf^f6$kAv-g* z8P;QkK=ox87PcR4jyW7{s5|e@QsIfiIci+igIr4+n#G-bxwKss6l`WrW`;;2Mb&gq z&YXU#C@cG=hb*7X4g_0frp zf&#A(d|ytl!HW!N_*uh}Of+0v+_j-BydZ2cfARuq^a$_Zv7rW;$Lqa}n+?8NhAh74 z1jRc~#Wv%#yH#a zdy7F8_?oBFGtM)tZHNPP{i^wZmQYS1DI+s%K$9Iy_K*MUO$?<28E;Jf!%j`85z^Ojh_i9kU*!qWkg8Gmf@wy z1?#dEjl9un>9f#~keAOcMe=Y26Rf-&aS@^?2G{N9& zn9gmiYHuqv9QsjvL@a?5HH`FdlR;}~!HQ!IV*z-_)YxC1-M<3UML(t|>+@%=ms3NT z3Z+{5;G?zRdJ&Hi*H52Ck_xWaG9jLyF12B+*h(0&Ao~IoG#zBmVf?~ z&QbgH=@askFSjIYBnqEsz5Y7Dkt77eY!GXZJvzlXAT-SS^2K<1+yMg@vwir!YTFUc zuodsOmKFj^qPOb{L+KiMZCr*lhMzxwHu}-}7=w}w(c# z;#d;Ngi1QrD&Idb_VC+IVx+mCnq#m+@gnYAv26NpzJBGXJ0H_jQCEM>l;Vc$acc58wy5W^47i$rUsY8C-&1%gN>h`<^>??W zyu3ty{P@wz=i%wO)EO*if4rsLDn?^Hyt+F3fPg?-(cGNz&C@qiYI2FveFIVLq~!O& zz(u@`Wz&5VO33uBZQ@4WSU#V2FfB$rm)RR_8rWLjYRh~V2US_Mh8v`z!iJ7^Z{z&W2GE^pHQ>0%Tl=y*P zMO7aqTo#3&zY?tnA%cX3DSC%CkML2E0C&jF$szceW&5~oeJCqBAt6+stTrk-+SoMKB=(rDw4rtR!ljj! z*L8Iwkc5T?ahXnmR;ETCr^lh?ojZ5tH?a))wfODTXiIQSk)Y$Y=e2)kN2dC}SVaWmBx{n4ckk<-*jYa%P zE|MAp6PJs8g*8;)zodj~%~`0mt&LZU|Ni}(oSdAG6ciqg+3FX+7|J|$ZviKPQ4u?e z>zy|*!xKu)k+Wy+y07igIb5CNY_^RZv5Ru(SzGM=6u;K?s%LUi3a}a0_XUl2XLmQ( zMC|z#C+sE)0l@@b-frO?P#V~=1?lPEu>^tV@iDP9s0Me!5X9)+ALZsbqVAb;E{B9X zD*2<_{Fk@qwb%~GgK8uqD$+LguLRjd&Z@EPI)E;EGB8 zEtEej%1a+?UQ1G}zJN_?j98oo6kha%hinCWX}}}DxZV{n$~uh{io?YbY$>X!@g4A| z4QU*QBp5r>hBoIHb_N&E$(&`5TZT_0y;;x1jQpbSYt$umT>CQq2iYg+JJ-x|ROl|(I3nvI)# z=+-s@(^l~XQ_?s;l98!+)A4_sbN|y>gjkl*Jn@2_ke@^!PV6j>6YlYWkb5*H>nm5_aCOFTiuo;F5cc=y5$C*UzaW9 zWQK`}t0hYXmmLMwm_JPP*v*vO?uli!<}d{8lr65(a%y5?f>o!16_--L?|`I_KmPhK zHKiS}F!VMP%#1VG#mZ#4b^J-=0j+D)QYcf(TGVkxaJ!f={ig`?k(m$wk9B1Go|*bL z=D^oM3&T08II^rhE%4T{7cX9r^1D#_2l#Wsy44)KQ2YP1dRs4Od zgXI4G`|&&uw~*z~_{h7%N7B`p9WKvdfv;clYFWTf_kk)>in(+c(|281`5ad)YE#?w z>&K60GX0^l_R1V!IP7<(tBKivZZ3u4Z1Nj*FW)D5FtP{3GedAQy0OBIiN$Qg!D zPHv@vxGWzUo?~~O6IW@O_X!CTtHF?#sjHc4>&A#{#eEE9u;?Q}VEWy= zf1k5DJafZRiAgC*MpE*XfWEfM#NrC7q=bwNXmDCX2mr*2Cl*skYVbNMnK+6c(hT>e z_L3na;B9->f4_X3vwAdhyWD!rzVsKPRjzf~pymAP>ZlP}wH~g8g++$@Z*wCpGZPIg zjf?PM)*J!va~>{k?&1d~BwSqI#iONx128zKl0=M}etS3D<`?^_NoN!tV~?{CRY_^- z!p6p=DU|}N=C!DhurR;J+tRy7Jfr{k4lvX_L#eOu*DG4Z&u`FY&=;E@kvlZVGX^MT zaaTvg#gY8_^$UWuwY3MV%AY6b6tn~R9vv0sSH$i$V>HvG@~TrP>IO94XeW*=i&j?E z8=Kwo9;|-(I^~#3z24oX?#lM~KZb_dUP#lFxm2%~RixCU>N};P6R3D@d@X&TKoxWF z>(D=`46c={wUfpVB%bl|3(3Aq>Nx!QxGn~VrczpF zJDg6AFO2Td9Z@Q8ibp||6Fg$B5h0WQOey$aiFddoN4&JYFkwli#0FMrqt56yGo}>& zk0}*afgg0FWRj^|HQ%*?6*(O&cImP*d;xTF#4F$fMt9_7Oj)U@9f8gbk3GXV;1=}# zdSZ0%!;}5F8rbH?g1n3`K#SMj)X)^47x=^g6hN4XBQS}WKXgy_TK*Vi)h&KG!DY?g zVkLh=PsKqchA9J|pqxK%r;vq(r8V&DO$_y*=dd3ed?V^QI&anl2Z4T;)v_e*OBQB| zJv%>r-g1r;&*hFOdm}=sZ;&!yw-Q&CQAu*XQ(}2}IbL7s$rDUQg`~iy=vUA8m_IyG zQ&W@3QA37+y5+Fl5QxvC`}6g8Uj%+F5IA_d;<-`^d13tQPwjZS&K>pc zo&T5MxJCHcffi9IMtXX>`N-1tb~pnKb@N221;K?E%ljvH)tGO?gU&+JE00IYPq&6G z)+S1sx_f$9XYDFJSNoZa6GZcB^DaB~FE94;&!IvxvJdIm*!q?oSGNj9+!ya)Vq&(g zcfWbEUrvh=5)uMIZ%H|kg_3cHzGa0D#jzXm)uw>;0rG2X6o2yMiG0PwbY)sTK4JoH zdX5*rJ~K|)^b7bi(Cb=|bS!^QA6kz}PR7yH978kXO2CeYh*&HuE#+QzbWhwQKy5aq z%F%u108p2yx%qR=b~aN})3U?uaS=31f(ev7>KF<#fm_<>B@lFRvKwqrWCzoiY?gea zq(qW+@avaQ8Fhj@TCyTKq?|WGD(b-lhI#Mkb&>7}u5LRRdQan#sHgJstra#?X<)fp z_;v$G`$WAyd-=kvyQr|cOiW8*{f!cj>@kQU@9&-0jOmVKj*b$NlfT(tYDa-$TiGPR z?=pjx?3_vR)i~xuI%8p{JKg@fJCwWRJeK$otCY91V&1)zFFa`ZLIWlyklo`Yu&1Rx zND^0-XW@#K6)8s)qhUoSraPR~4a0~dj6PnCr-V_qfc`!7=fe6zR~iF-Vp~*(hVcMF zw5U<1N* zS_>8^PW1tqO`lWRZBu{f;a%FZc36XJi8y}340X)K;sHB8F?rB@n$cU8w~|kuywTnS z&rrpS+Ev?*XHz!To~#87lO_cxFRi^5WNa)d`7I;D!`r}mzCRy;Cj}V)#ctzn)VA#( zLTEF}CfXY;s8KyDR29?&yrz{5)c|`{)z+dwKr;p5QZdJVh>fN9P~`DHsPw=4k1Rld zKLPj>PCxq+@-uQ)-n@B(f1B(z_)hX41#XUvj3_gI$j;98dzQnK`;#W|>XnV14GNSG zT52Y0Uu4Ms*Ye}m*4B_78!r3NmCb=o+8H|m_KC(kab-ysB zKBULv^C7){{hIG+_Tzb-m$z3jv+-?&NZJ^_pK-*dUlRy=eIV251O+G7M8^z^s%>~i zT|q&71b<5Z{)t&Y1H;DKExzTHtDzx8_s@Nh+FW?zl3r7z!x9!5+2Q{h%YG}yM61zQ z)Ie|lQO`afS3$mZ)|FkND_2HgZ4%=4bw|XZh;XK za9YKd4JW^mc05)coP~}{BlxyACo%fa@!epBdH=_7lT^xW0E33Vx0K9q2KG5f5W*lkU&Hq++c3{u*^B$N3nBlTR zYaXjt3h^7Yo;%g(%pYp#AP#1p&%D>Z|tC{=ZJwcF)x5elT3A`t5D zkL)l3>RJqpr+j){H4F5=jF3beoBqd_J(qaXkwp#XnEbZWelewlveV+oKO2OCxh?vP zjy5LQ^(FD~si|?Hy^|BU$B#p+eExzP?iUWdJ087@fegSH1To0I1!h%C+1`uA!kH3{1-5c@3xf6DeyDRzwGLp%@1X`Nt=OWU8j>(G`%=Y$!Sy>dI~<>#~- zzK4p2_Pis4s%p34;`{k0Y|7gq`6$|u-{r+IgORC3*wmDc!br~FX^HL_SjZWFCgyhZ z^gNx`_>EMSHtE~0#v5rEP~H=MVi~AG0umD7Cdvs23L4MUz@BS6I&#G}exT zz(^vxv${#67o{@N84)3X99;puW}s!?0m14Q@HTUZL~8O60E15}GJ z5xcskJ)9!=+czml;xNe)H5^as(IX6ca~WE3aT*8+3l$X=B*2LaEBC|0<3(O@ffiZn z%QNjS+W@TTQ=JbCgC6iB%Usn9lK^+nyO463V)#w!zq_2dK!MnNoCqFhc%Y)9N@NTgRn6JQZ1$LP2?zcXAm}Mat;oS>(bi&CSDgyT$jUqi!>xCKQn@1GVn0ocfG@qG1r!s6jm_WC;w293tv8JjqF;URZG(;|y_|6A}Kw>~HYPaEwv$BSB54Az0Z0>GfE5!g9UL*?4<)ceJ#UMkQG~`VttQ=sOfY1gdat zw}qMt^=mn-k6AMQ3s(^=W?^N;S!$1v2B;-dF@d>n?zCN2K81%2K$Y}oIYO)9<6qm6 zBSJc7C%ifpQaPyrWCC1Ua`Y9;_jt~hY>_|6MpLm;gz;t2k()zX*z*YlHjx-bqP$op zot-&jgCz1szO@XY1V>V~uMYP<@(|3Co{KDa!8VVL=&vRi5@+>qLi#n%%?wD9wCgK( zL=N|)*G3BxRnEEynSk|1tEj1=_NM4I=8fkjCIp-e$T5sc$jYA53xDY)gy!|f86)OH z9&Nl7TZWAKk^~WrSV>6<`TKQeAyW&BmXVQiN$rhTwInfb@`Qwh@ejpVWMpJfU8eTV z&O~tpsOkDswt1xXGQ(u!@SP`VF0JZndVzAt)Gw5Yi6{dP51k!^*x8l53jVg5xIWU| zMnZ`Q5yGk^?c%*FC`i_0s1-3oR+|p+$I?>3ws6HC?SQs68Q>U;i;MZw&!$>Ii*dhn zJ?g>lxeT{EXd44apeeRMSDvjBaPm^vXhB}7aT7uG@Pu=x$_0nsb!@U5bqaL~K)nEv z>oK(fxZCGPHx~Mb=6_~JVxjr$;!n}vIVtci!$tKE(XYbP5fxJf3Q7J9Dm{Ikapz+# zi~2+?f@maZ#cys>Hwj=aB8bxYKeBc=moI_tRi0%Re5jK1+DS5|rKFCx#!_6V7GAIZ z^{Fs7&+MITkED~^e#8HQk=}YSlnLPpQg%gm4z-jHa;4}=$sC8!$>9M0`>$qxm~UGD z@uyFV^q`;T91eNJMe1nU3f|xR2uwNyaP{8%XCxR{IEV?_ey^SO?%jthz%46(-s7iT zYQ6weD62ugUA$pph3EDpFR+bj6<|D>K1~iXax%w#nUP&>?d{K(GQ-{Wn$gootoAQY z=5%WxLsl(g^^L+iHJgRFbI1CwGdEmaUA@lQ;@nQ7gIP6-a{L}JvswKzC87t-=+M76 z5>{#re=FFb2N^$Q7%aW;rKF_r!Sp;kJA0l`6v=+;`W?oXXQ4NZ34#55@1NbrzdDYW zV-4OH91cHZN=G036);$3c>G<-TfQGtOD1GgY?}4B`yG!I72Dt3e(-j* z_GgMG0G|lF0Gy-{v;F;jt*`b-5#Em2oBa75VGj&=CJMQ$E%usF@Z!r2q@<8n`;x;b z)p5PNya3&6Em6Oj$6rYTOf=Xn3*v_v1>c~2V zhTr8<#k{}k6afd8nz}qPVd88@F+&2`?@wiVVq!Y~$ie5YQuoLcXYbpG2b$k??7;6b zwnuE9g3KZ=l@KZ<;I@~hqOA%u06C1hx;k?2>t0Y7R4j~#=;BgRB7lWJFK~|(aqB8= zleIV7+B)dC=x-5zW1RoR9=EWy#S+`K;z;DB>8EUVucE#jCp0wlw@__3g<}Px221S6 zBNr8U&X`_;F>u()a{^--A0J{fRUrx5*l(|~WNjV;4zkM6&%nZiP10xRmzbES4O?AV zq2t)=%dTJr1@n#>Uwy43=-wz;5e3as=z2=nLK#$GLeK*dWf^*`-_0;vT3mb^5l)6k zq3BlFzNpZTj*fN%;SWyZ#X$2hihnVYog`Xrw@xDjPX~b0{&dgS>u5yNynLl4Qmi$J z=_k)r-zvZ%pw0^|zZ_|a6nQ&l;E4k=mTO?v zdVmw0G56(pE1{L|HkrK_vjBlMg&fcWz<4eIb#-GI)Wk|aQOgr0WK4On1#en!*)jv` z{>J~eMKY)pK~Q(mWP??R=%`x@YX4) zP~U{1Wg)~`>Q-%OZk$L#=22j=zEds@~qto5Fg9-p( zRB9^w=mIc#Kvh9tp;stqpo~6y_Kf4j;vLio>_8w{d;UvOp#%tQd5lEF4A)>P z;L9y7D_bAaW1Fu6>TlCX(SdC<&tL!J_MVuB5~Oo|*pdzG$_xQ?EBRtRTN9 zU!=wg_1kElJbv8FbPY$P@r84~15o{W8)k9D$B*P9d-Es)ADxH*E|=XLK|qT?(di$8 z<}piHSXj%Jb}0gq#PeDcFD@;$l>`Q&BG3dN6sM=BKpX#eCAQ3srd-_#$wGkabx0@m z#Nl1k|F%@tH#=IDlLG_3%HxQ68P}2M3M?o${r&E%X7bdsO5(T9r2k>!5cB{z`}|KucZ*=tRO#l*ctHmBDENQ zCmA5<_U+qyd)eOk-}_u$-)zP|a}{;E5rHWKd6P6}J_EXxYSYqY0uB zlq}A-dV0CDV8>$>u;y=lCoYIeDLgk7`uVeP$L1|U!eW~#K41>$RoORNPIYy4og#?j zElOnIm)12DE);55n*a&+e&TSayTFdur{?;1ssR+W*6#`2ZR>Fc9*@2BK~tNtIil`c z4Y%7(N*4tC4@}L>67=i_(j>uzQA;YM@cUESk$dBfBH(fkn1mU}Dr$Onc1jKp_e=r4 z1+fO9`@icAcD3Snd}nL{`ghEUV*7!UhMs7YshEl~qwUd@<%x^$o?G+33K0?vN@@l6 zrYV5B1ll;D#;`by5!2IqwnxQqq$ndSlHZ}FuKyr2@khfuvOp3b_wXU?kP$H4n2mv` zCH-~q69de$bHDHqB)p>ChDq*qx01e+*28Xbs^4aaK_dNMno}`gw z^D{Q;3pU6}(HPQzxaRcebo;N{Jp|O$vvgC#qm~QH%Ym9>4R6qCyuNn9G8Gbowzjs+ zHxCN9x4)Co&*6)RCR=H>A$joX7jqlqP zb{4q^=BzH*_nQLHc#YWu>4-=4FL&aTXfe!Lfv-GelrqO59#&@jhglRD7-;nNIX37W zSe_LLPGOVN1Of>c1?J$E5J+)x=k2_I|Gt8+|K)9d=J}PCyNYtasvbC{1)rk@R_m{W zgSL{gGM={-!nn3UY`SHR62 z65hWjI&|H|gQ`w@ALeTnOTh=f{@vL@g8r0!M3^_&4C+F@JdIrhA*+us@31+N)q)XF7EG;%25OKqS-D!^;A242v5ee zAwq2In-v`shX0`L)2HZqIy&UD?iW-bCj5e6V+LP`bv~0ceT^i5OOzi|Mbe(*942vNwRQ7o>1K z9*Bg324z!)1EoXTU~sx6mF=j8*!MMhr|1=6_v8t~my3Lws*!SB@bpofH9*_zesw

~Vp+P-nbpYjSapE_d5B_SJ0|EA@t!2jifLXzI3P1m^%w##Gt8KM65ebS` ziPoz3DDOJDA&Ku>b$W4;0kU)I-V!parR@hY1w!w*QT1p1xPQ7O3r=!9i8}B6{6*(i z-UG1og^{olXOXZQyaj#_11&8C{M(kxpfI!l;%-U&Q-CViX4!tN2maGa%c*;k8w@eWhr8_8Hax!yfO`RAzL3$+TH$ap6EN8ZGvt9Ib}@2WwTyFtGxL2TalG4vlGbq-`oftMa2Z|)SFADaC- zpV-lcs=2zVDlIqn3B0Wcbi2#TcVa8e-Ydru$uY*7V_4QJ;$buy8eZmU5tGmacZNJV z+!(=H3TSVcn9yd?y;Y0)$G#Xay-=V#OiU(cSUttUCj30)IH14y>fPZ|I`!`T`@r~k z($AThpR6kj$ID)*hRrGc%TTX$)2A~(v{E-&YhB=I>c2Wa8j<&B{$ zHe`40O{D%A(El#Z z7CTZD!|-Cy{>1Xc2E*SEa2=O9T!P2w(h)3~qWvi=OSU1|yZ|xfJQfw1TAI+`DvdQs z)y9*K5E9Lq{hTJ6I@2a*EqI&&0|aanXe#qi9m0&?RovEwu?csD$+kT)#B2TM=HmSB#iw}JY($ISLTyZqT@w7n{W zNiO0n_YcXWBl6q-=-EGxjgy3n`XIrGjp`>kK5COQ}r>ZK_l#~>=>&uftuv%zT=G1Fh#SMZG zCBo_gb`mxaBFT!uz#*dti+!Z%alAInxk5~p`Gf3GqrvrU;4`;Jz83$eFK4mIZN2m; zLMSQ6&w8`)sgjbC$kDK>R;dRLWYoLCd)h*CZRFB~RIX%iZux^YqOwNx z*l0Lgg;dN-0CB4!M5nT_v}6L_oLtlo@>i$38IfZCAXl=e*HEpG1?TBfjgwvRL;8v5~Rgk z#&=VaF7E&sk3>nSbNuu2pkF+UK^zYckBDTd??|ekI%+(LJs$)bO$HYq#`D3*!PiAN zEv%EW7F*nq0BnN@@yKKd%IVgH_f1-iegnrJOkt?1iJ%e=y1Kkrnu6QumQD3imyJEF zQ4%}5qtRX@wu>RE zL#cW1H(>whj>RgDTa306DrM_~qplx$z|Y#mmsa8ogTUw$vuOE!j*HPz>j3$ueNfbp zvPEy2{P_Hs*e>fXR{>EilJ?+UXXVnlkT_~~=qnb?2atN3F~pa!a)m_S?2;WDiS zHK{tKep`MV6P=hC7R?~{QC$uo51;FcITPS8?d|O~0l#^U&89pM(5ei>$E@w-ZS%9f!kuxHic_*%Ce{e8TM@9 z4tNLMmUmom`NVnoqlyskQO9Rn+(DEuQeA8TPj{VC*7Bj)$sa_zR#~j&U+y3O=!*r> zfGoyxEJI;r@T7yWY>8qB(W!p+U? zF3ANP44vS)eN(U}*_<_NvmuTPZ4oGirCgG^p@wHPqtfmSej6-)CvCL4k%un>P2fIvl8 z+syR~NQ)fPOyGes^Wn*Bgk24`d+aZUv41R|1rZ_Lx}+~CxQM7V9#C6gfz++Dr7vMi z6lMfMN4w|joCn^v&Hugs`S$5v3myn+g!&`*!0Gu%4DNdz7R#kyJ!VzR8?gdiGolL} zYRQr=C}ai2>yMZL$khD1np9xZtfZmHoBFEvulx}3ofxNdwY5Xp8{xOQita2my+V;S zQy6hr|8W=L{sUM88k+E{?SDib{s|pJ&Hk3!99|WU3(@(WX*=-Jwh0zk)3{@(b>&~4 zXmY!kN_ytE^AwCn(>{qCsMdA)W8?edG&)O07D0aMpB% zV(;XHqI{8e&hC4L1(*;qyTP<&$nOijVRs5MtgKhKtVtCrKOXNsTpyyiy!A4dDs$3C z36Wj_iPh%USR@bxjPht0EtZ5$BidVR{J0OlT}8<6FK*+|nqB&iBaBzQQV^F~Bn0$? zl&QY^f{x<-ZE@FEw_NAE`2nsR+Nwc9LK1LZi_%gu@vZ$!Tr+_en3NLjETG&JnN z!X_1ER*NSe6&5fEfbE8A>gu75QM}|hU_)E0qiW;3#B+5UqrAqQ?Jl^*Dg$8eKndc$ zd-o2XkT76)Sj~BR^mZbj&8;}Bf9}9=X#E4+)_WX%J5AfS2l0$*J$;1{8^latFjsjy zSO-v#(RITmDX*1U%qHVsz5Bs6ym!mXrYvChh>OKmkZi`Q$Vj}3-Emw<>#s7~T4gG< zQ$%A%{{=?P=-YWB6Qc2YPkzAkv7pY*&L)#L9j%TnMa!PM^*Pd z!x8RD_y#Y$#_*!De6bFQd64?aoM0DgDZ0qczE|oq^ZP-VsyQDEe0}Zf=}JTSFk#*S zK9&G|lT6R9MV;G|;PF&%VEa_7^5~H=F<;#sV){|5Qesx%Dol)Zqu#2GPc(HH&W^9Deg{Fp9mncu%>eT8^H&Lx3IE^ChWE5O^^$#-uuB zZYpJos7;X}!AV0a?|WukyuOsO)$K{u!+-T`|M@Xk+R>?VII8%Zl|IC70e+WKK1BQIG^G9a>*x?in^k0f9%&2;gvxWz zOt~y^z$}mwO4CpA3mZ#Ya=r_d?VW_x)rUR4CAoRY3EnZijpyMA&9A(9Xi{FkPN-jO znSZBCtcQAq_@SJqXr)jCs(W~R+_GbSCTJ+G+Y8IVq1t5Yxe zw&xnfUmh{iOW{g<`{lY(08{E)uk(Ttre)|(nGp&bk%=?-I{-Pr*!gVS67=|;VzST|kSy8+ zt82-`OL77Gv^y`rWCcZb)5Uv+V2!!kt>)hAD3qvy2IhPYPfJ%~jnkx0b=+q{PCobE zQVKo;!jwDf;&?j`Y&A$6%2G`JJ(kB)cAMP~im)Fi>%*4U2%b*!Kk7t!q$L+YyC-V^krop}5Q?=Rl`Tv3 zyGOSSX&H#jeSf=SERPErX@fb@R04kg=f~)mAt?6Y-yZ`OaQeT#aewOx6dT9Iad!(w z8r00qWr9zKPD>YfFjaja({$A^(KOfW zPm?20L1lPkIV(AKPEV*b;IRJ~4hHIuh|+*NdV=c!f&D(BXmssXdQ{?yw9>GNAo)QU zRj0E5Hjd!+D16LcSf6H4WspGK0GKY^h0xE1EQkQyr6(AIfvtlkav3wIY5G^TcoNTz z{^L7jizX)_C@45+iwrrF(FMEgXR|^35mC~$ZfYccZXNOe=}ji6C#$1vOjGRv>dsM` z3rg#uziN#Mr{G5`2Spa!=_v$hkbLOysGixujdQ5hC$PK;HFZC?mG9$tn--^kJ?UX) zX8r=0k>_XqzJ);61s9to9{`CjTYD3V+I!BtEJSFpTk%q5VwKB=dFnGz2%6w;I>bd2 z!Ov$_oYBORYaH9Uvqx|sOXBhjz8Q1yUUe8himSxpb);3 z>{7(_gPVuZ`YqU-WfY4;#ihpHaQdlzR#1b%mO8z=yE|SA|u_QeUa zw_1&CBz3`KLZC~@;E9a-=-B-yi3?_Rn@bd!FZeKi}v6-1q1H+&B4N z{sZ~Joo78g=W5F9*_>?ifTy6#CaN{dTqN%Irux$`mF%}1JKg=3wqvd7ilZeERHa|$ zP50fCG8|U#^itNyOAG0pxKxaGapCA2z~Suuu|%*19OM+$dc)P$(sk=Fr-B9YTh%Pi z@8TQ~&A0v(^2XPw)8>a-FBg}Lr;V#-tUOZ;3E$U46OCQ7rog}ivqHeTl>%5k=ju9} z0|p_r81Xw8U+kgICDNlMMb5vnjOUh*3OBOoONglC}TI*c>z1RH^oJz zN?9}b;DKj8IhFx+>%T`gay^7gJnKry2*C-I_g~D;&YBJHhF&wC5DGjn8=s09fLwJ2 zk1+4s>WxJK=Kyl3DWo3s$#?oYu?s|Q2Il4$NcfhmrqcsezL(tW_+SHd<$?;oYhvPy zJ3m>&FH}2t6QZ7C#`VG7&T$(t9ViNlqGXyz9e7YBjqZaKygq&KU-g!XV`lFsj<-{l7@c8!(!U}icDUi3Px&S~jt>zz63 zbFDiF0YV1-3w2LogdWI5&NH zy)!g#>ygqWJa>KD0LeHK?d$ufJNmuRdwTSodt}_&>dH}Uy%E2!zyAP`+K_4meNk3o zEe#EzB8Up6f{XXFD=ugt!<)peFINmlDL?A+Jm5%O&e_MGOchN#;0@zDYVLq$D-)%% zEIye$Gx?(_b%92sMe!@@+r#SlHBQzc^2d({ie*PDJh$`DjOaT@pAj{DcZco%Q@m6(At-8fj_r-^xkesR0~Qq z#=+y-E3y3r$s?1)4Uys=Tg6hp*ju2prWYh3(HsO}HGX1hiUx)&BuK@5Bn?z&wcDaw z`&F3Jid2G$JIQcr3^k#aZ9AuPzzCJ%^R}wphhk|p7SYFMw@=_oL2}-bAPZG>okF1^ zrzR$Xz+{Hyi$bdv#xom$tMYL&vP-f@trKZKH`|0WmrnL@91Tf31XW%R4i5H?j%?6K zQrli-U#yCBa7^(D1Qg!8upQ8A`pp!NhvIg#13EfLYKLhmeOp`vv;%qCa()w(bmre6 zDK7+Mqy6iw`hInJ#4Rb9xKfpR=-&ePv1p?!2Z3FF^NXT@ z80KD}=>}-@*l}A&(r{Qz5v?{2RB*7v&kubx)RA%7*Q>$@Y{$D%joXj7X<=iQJyE|i zfuYp^kqn{?9P_uf@r$;;1HJXrN{TUXx7D zE@t^t6WUX^DXSDy{zwJ0xk5lB0H#U(>UZ_C@LNq3-<2ENng{w{dVy1&&E{F{&+O2+ zRS=-P#L4XUNN~vPcQAHtaDor5inT^DfSb`$bUTS^(Xqq@iIkTPDj(8T z=cR)-;19#Gk%xgK6!~6O$)j*-VJc+sy+4*>88LbTbet6duH%%c(WN|#STvx*9_;?! zx)D1vTqkD{)8zq>W%kaYm}!1x^R}|ivAlYo^U=g>2v29{2d}Qb`qH!q-&S4RVH`eU z;fa5Df&`ALz zMDOgD0Tl>C0?*gObrEh`yM3%AesyVzvB(HXcCUN#%=hu%hQ-Ap7GpNph3>i};43I%^3iD6_H-*=A@u zz8~;5CfpqcNY;H`*tVQ;4|_SSYA_VoL6kjZso9^s()VsY;Do#~uC%mt*>6p2dFD$& z&cdRQR|&X>$f1J@T>O~BP?fKo`cyISER8WjHb_GJ_oU=HmMFCJ=t=cJphq$jWXBQJ zu6{n009d)4TqA@Z=fpIq#LWVxkumd_%An_wc4-XN1Q5Y1PY3#M?7*|5@J!Tt)C721 z+g|q&UxF;Mos>g}=mw|{WLuwWh9jE^jy!feO(~zCuEI)N2Nen~ zGLkN=l-9=Zyb`{>OI=UN#J|h^l+|%R9G(dS7FtIXY57l2I(@&8lluVghj2AB_HV!c zg}EJ%^76``?96{O)=ESLTkWa?kapO_q|Pn+wf_FDm0?qI&^J~Ks~T)mZXCa&nlrcj z`9n7hIioz|4(c%touJ^+vV

3RuJ(Y%S=6`8f&hm01SS=9$yeU_9oqB@UbBm*P#y(t<3Cfad{`Os(Pz# zYJ*2%HCxjmr-(H{jcU`#yfH^FpcmWgz z=g{bfK*bo`M$))6IA)}V!D1@_IDq#WhW!6fxwEQ&cldR#cOH1lVCuke0?U%AR8ClI z--F4>Vc;* zCI-x2Vh59upXnK$4R-4ad`h^|+e{!-oNw4?oL-y6ZcTwD%ugsyuF1?*viY0MOe%Cg z9fN0uYfVw>IZAU~z4nE2F~JU{BV?Hw9u2)+0EU*{R>4a&K#!w~dP$N%DQ zyrni$EmmqylI}$`KKle>3qkD`C@Bo7ob^j|-4B;6)Tt3q_1s8r9KOf2UFPG_Boij% zv5Ts8+~>e)&`)inbww^0mfpbMkT-=#ktnMe=Y_1?#;HGW;^*g)Yla8SDmFod8BCe3 zg^!^Zc>is<>Y*1yysbeOjju`u6iFAV#ll_1k2gZwnd}Wy${DmJL9Ghkk=mhwLW`^7 z+U_nN@pKNZ(Hwi&RQP+yGTz6|tp{B`*w-J-#hCD}nc zh~kaV>t|h?a;-rs|FdS4=KAULX}XpmySC|^34KYIe6|P55>~=EQ|f<;fuDvf@v4~f z8==wex@JkQ5+NMTt=G~(>IAr&dSAhL5n;%buKeI$O4;qGi%#@$N^HTkwhvp3bJh&U zDI9(7<#%g=t4zeb*j)hcss06zh#@E255npdkOEib@nVfi1&Le3*7`VcAOactcw)AF z#1e~BMYl)-L=qy=#Hr)1k8yY}_N~i_h2tpl$l*M*NX_`l-O%03agwj`s=19CJcYJ{ z`<+gro;Psy^Wc@I4adc=GZx|o-6_VX?ubT>mXH()r772{EyxkFnKll{NW~C4awiN5 z;_L4*L;B&|XbyH3@w~91lgqr%QK+VjF9^C08)&!CUTp^aTGDp2%908Vj)kX5TfM4Q zWXdO#F7XG2(obK0nH!>`+DK{K#+U;RIEm_VNaR>pw>PV)WwPeJnG(rLDaZubXIIwp zb>9Z)R;k_B235#CfS8TS&oz^HubdH+qUVPC;>9-`C-OJ89K27VOkPa}#A3vootH_X awVMN*PW&Mw(*~wyL&y`3$Dba%c>RA(L~Zc^ literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/extrusion2.png b/doc/salome/gui/SMESH/images/extrusion2.png new file mode 100755 index 0000000000000000000000000000000000000000..d1d6d0823c8a23e8165bd4a8c477de73795345cb GIT binary patch literal 23467 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 QGz8@NQ)QXr$0o1;4`<|*_W%F@ literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/failed_computation.png b/doc/salome/gui/SMESH/images/failed_computation.png new file mode 100644 index 0000000000000000000000000000000000000000..e44a538f2f61cd6a9e78300fa1734a9616657951 GIT binary patch literal 5767 zcma)g_d6SI)PAg3X=6*&2n{t8v8&W3p=oWZMg=v3qG(E~)fj2jrlFLoy=w2RMp2_S zHCj}SQbEnn>-+r&-uH*+mvfzSJ=b-fbKmEF?r6iidRLfum;eC46%1P27yzK6y*yVL zs4pW+dl$C=0Is_jZ4Fa&^!7V!!n^{QC}`n{%aZ)=e{<0%cFAdlygk^TQLMcf=2oL^ z%n@y8+-XucK*)PA0=8oVXtmj_(9X(4*%m`rbeJ_;Ka2Tn> zo68y$TeXDq%An&8{~`H*NIA0)q8{%2Qzx(-`B?46OlH5wUVJvQxv;j{E%KdK;B1QK z_>rI{lsg<+2+C7iT>q*^F-VQzK>%qgWu`C2h3&&g8tG`pcu=i&f|n}#2X5qtuR3~9 zP?McI9LNB5_s0BM!o>-vbTpq%Q5J+pSrI^uyItYO4pXi8>gCV~UIdWUE7<6x!t*GW z&YpG*uO?1k7@gI z+23ihYlK^Qqn5-X=(GLA(LypmLuu)_X%cwaTrLPvzn6dg<40ds$c=OGGhAVnk9__7 zMryYhf(RUOHPOY$@wr_*Z*L|ETeHzwgUq%ZrD^V@J!dsy`&FL5Tw@?aA}wcpLuw`& zl`K&+2K-yL9ltDPOAaRV3!j5e&G7F_DF69uZFD}On0|KyQvVwG)v&m zHG(nDH;F&_-WTe6xPLvwzc~q}5T7CTA>^G@4dbm{b=(`0y>cguuJp!KCu3Dz1 zbocZaUInk@f3NJa2x@XXI@Q7I9l={|Qm?`h62yU`7(p zg_nsDCyQdp{&B-ElbJ=otuYxlZS-gG=H3MsCX=3FE!b&37Uk4ndHc1h>P2OG+4$w2 zA6fbFPO;Kh)VOxI-acM2xi-+F^I+3@S)+IXPrzERbj5>4VwuX?tcMQNWDJ23eU!3H zH!lnbN%SG8yQUsUt%*KTPcNgjPc;JS<@Fwrfm~Wagm%&Bf2(-T;)$P?n9|~(kn@~` zY2p<)k%Pt)E8+@Nbk%hjlC9_ikmoC?oZ+9@X`E2x*r{$$vJZ<slTM8O_J%>O!vQXl;WB-%KA**mKfe z11{!hMWjIPEYj;J1_hYc^E!#teh&})(KsO-esA1*?})1m+o0CS>pD>#ryl#6{Uycia~V-Ty92{<)6rkg}ElF zA$^o{)ie73Cu3Cho)^z~7g9R22wy|P*3_#l=NH+(D|+@fVxAz%#VuZvOEKpAP_kQg zG?j0MVO{DS`KR;pUN;SZI7?8Ke%RCGSJkfiZppY*W~cG|>yCeLmcVjo-qsfu^L^fg zf(>RJe&f@V{#x6%daZw=sdr>7+;48$(X(oKQ{LPTX?FuM*>l@iYriOG^1=qQu0c_2 z!#sm7xM?+o&w`z`ydO$^;Lij&H2>R>l=OCTP4`=9vYEL%-2=<8dIz|eKa+5`OlbPH zYcM~sP%AqNCvy}{;->yPJylU#3QU~wf~B>#>CH3*sOBb0*F5t3Q(LWPqwD859kx#< zmBqmB{T#d{*!zr6&mj>qgjM#KpO`|X3W}-0ZJ}~}4N29kDG`RjwXMby zhBE{ptCmi|Q)Lj-iazk<22|K9eMu;*s6?>XJ$S6bFSc2tQ(%| zg{SAZF65v=LGx-k+hy&#)+o9hY}nCnMgX!HD){M&A_?onMQU?(txbQ-g*U zaZww;^ZSB`x74Syd_!2F>V>V6ZKl)7;z+S2cZbzr4cJQg$F9tG{3{7!Nin2~$FBiY zsDcvbcH_+451ZL*g?fmHHCxVKZ!0UOe2Y-u35~q`9Qrp8Sh>1DX)}|ma|tC2pIk$= zP1@3>6iufqUydQb!c-o48>&a64MsCl`6EVBz3l?T53xTEIB~7$^B_Y|!t}okCO=+% zL4l)yIx1ZvXCs_2mREnMF+8!<_}d~={Jx*%3?esDTmD8(Uk<}< zndVrVWqFK+8OQ8L3h$(SQ%S$cDm;`KE_q}0xnq>l9{IP-jm`BcdNsAk7PwsTHUI6( zQBS!>9Ff7P4V_lD4*eZ1yvM7Kr@_Zoi#4W&MWIh>He#V>@vqlKhN^Ii4gP+ofu_Oj zTV|ZIt67fYSX+}va)uV2XYtPle7p64tB0dW!A|j1@YtqV;d~KMS*Ov`TP-#lPdTT> zvH}mS`mtjrB-)TpF8S=QCTVxMlC_U3lImAQ<3uCq_vzitp57YU){}oUauq?^nA+}T zp)YS{iMD;e=E4@*J$i$4#8qLI%2&;H{E!9H+9(981Q-f8O0_w)stNZ2(c*LvqdtZVsQH^wO zGIeD~jyvP=e!jRBZXI7ZvAz14SR%2Zb3dg-W`1UdLOtuTqR#m4&(QSn>dE}DJ zOq&ZljH=R1w&-x@55939Tn|@wJ{9q>4AeKg+a~hvV>LW!A-BtZL=#9pQTupHQLGbo z9Q89rP(!dwp$eI-QUk`HTDR*e=RCVo_6q|G}$`9_)mw34sDoZ~qMpz;*GomGC zQm49S)g7QAdoJ&-?M$nxgs;9%>+sr+)i{wS>~6A9Au$!z-)#J(+7+xuBoWlbqv~U2 z-))NrYz_v>j!sNJK|HqV-U#hFHS5VRaFyFy=Z^SPKV7c1+G|E@ZeGDPhiZeDJ8;8j zpmN?7|K%O$o+`P^(W#C7@lYM&o4+ZNbS--36#7ayJ8dl{^@>>_R<-YPeVO1bTI?Zh zSsmhWBln&-QAazJ7t*((5w0cF2Lr0zaX~Gg2L|z#1wRUW)jVZjlsJ7>0jQVMpyPOiS&Z^mU0kFWZ*7ar zj;DdP%wJU3iNh%qra02EN(cMbfDTmWt}!LwPe%zr(cmgKZihxNsz%Ubg_4Hx{k{XhAY5>)ui&^nkcVn`OcR41D|175# zxkhfXR{zK?>o}p30SEF45hWVS5<0w)I&X^2!Els543#nE`+66)r~(WWJL$+xr)Oib z7E@9BM_IbwweyA_9pz2hUE;akr7sv4@&Gy$-8;tv(Jn8GD}l!m&9AJVLklmKFtsW4f|5dGxcFiFaVn( z)9&ByG2Xv1HG!P*(E?;l(enE7mbxMkm-qsMS@dB8fLGQUrwb?+M0e0{rGSDWm%ma@ z=R)?Eq*G$c4ib(ITflSKd`Vl&VMfs^36C02(Ms9KBlTPnT~r#izfPtRzJ~K3_ty9a zkE}%Gp;KtfWCfk4t}x+Tn>V%uX=^vm|CGZ%pOgGUY5n()Fh`u0s_hj{%>G)i-$DG6 zHTqv3@(iQZ%b7U|_sip3otW+D$&dD#m&}+jpPR=gIln97o>jEWU2ZH$Dpt znhAGz3X$~~-o*jjn+EgJb!Vo_L66OJT2wwKYb-J07%Dg;6es01?uF7i%=$*<;B7yr zITz5Q3j1wYJn3Aqd1gVZFFPtR?1NPrVlMa~qr;EYACeSM9NZn7MW_e0mdWHxg;D7v z2(n0V1G3ex2tCB6i@%91Zxq?#+~)BdW5EyD{?GO zC1S<%;(7Z{zHFpX@xYnZ$;B({B07+AF+9}rRFa`?w!!6iK&d#ECC!7=A%j$M$TXcg znvI+(DhgY;=2}rQhaOymzH;`uHf~*e>J34T)ft9ix}-CGWivYD?Q|_18Y5f8DRqL? zOe0Ncp@$TF%C#Lc`%RUng20Ml`5N*gB*VSBm_oI;3*0t9+5lFq_KE^3du0LiQmy;S zv^cRWVr~F7veAk$FFD{Kl)G9XpjCQT#UEE$F20fa0Ae8en*=N>GD>=KS-8KRzS_Wv zXhXk{tCeya97|2-7}bJlNHO$YVdVrhj?1S_$|rAFfkOFzD^U#6^|_Q{Nbj?XVmu-0 zAgUkAS4q(5BySR_-4j;i3_;O)Dqa6{?m4NwJ@x0ELaDtpDx_wLb~}_dC@L;Mtx=;0m14B$ zr82meJU@iA`eW(x$ojdxih1bqzQ$sARkUl>%Xpc3qnxvJYGQDFtLrE+_qT{qUIq&& zDY(bGuDa0og}4N9;=a`jhZXq_*v3@A4i|r}%#vRm^(BebWwq4?0Ip*O1@@YH{kEv_ zb2Zr6w0}AqNZ}-ao2Rj|c1R=q&SY(QUg!tmw>LcGO7R1*_dK$^7|kb91gn=&cYkf5 zX<{V^d|SFWw!q))EQcZd8Iiv^uY&e*lzOL%is4GmJ z_V6anLO8s!^hdp!*~?2Aa<~eKOmKPej)SL|BEg&607~|nsCK=gFFTU&Sia~uW;MRz zc0^HRvcBbE6@K1V!3Jh!55b&Fc#?S7&Clm@v5L>cwV<@hY+COlDaH1%?C6OUsq=q2 ztP9bCUhB$N`8@gg9XCubpZ*cNWUSn0{-&L29v;=cJzm~i4;r8#h#~ZB+9zU-J0`$T zR5#16I(1|ueex^#|BD~g+kNXM-~eE_xEB-#F$PhA;gtkJNM5QBNN$7A0$e8*+eHCL}T=L9Shg@wzo-??YB>U`0_0Btt z_dF%S+ZPscque#>gT*4{W=M?u}L5(tLvJ#p&+30}~Q6`bg(4y+^emX17O z&}(=kG$NAz;9s9%Pn2!qsZMDH{yNR0>DHWa zC&OqGRev!|rMe*>E@zM~WDE_F$fg6o-+O*~ygBhrB!uxHu)^|ji)BVuetc%8N$4Ap z>57!wqY&sC1{r4wr1ffxiXnwYros2Nd|PgaZbw9vzF97&=4qT>>DOwx6)RYJwNp0KKDEvy!1&QP&KRdhS3ks zi5?%#*)7vgh4b!+K-sO%ZrxdKJ2?7-N!pT$`>aQ_Wzf>5d}&L4f4mB7sDek5vXK`@ zzLDmdUM-vV|K0nkfFOlLJ*{6=#Y@^ zM&LgBzTaBk-}kONYt5QD=Q*{XefDqv_Spxmud6{q$Uq1HAkn;|b`JoYO#onst2j^% zeeCA|=;zw=J0@-b5K;a4!a!0AJydzcT~p`w73@`dB06b}C97uu+yI(t%0>@0Hm2l@ zI5j?W?l_A}aVFzYNSD8%Do!C+vPJ`SK1!;m#a#@EC}Uwt(NZKj@-Z&|n__Y_ZpM#b zI$_c~kvczT3GhY;<}LAB-c6=S9d8Yf6t3oDFgci@t((=dIkmOBImm(;E-~;2z423xKTp z|EK2bFHL}@`&w<%?IWiNJ6f1hL9l3Z=v6-Ou7!llQgE#{+6IKa`MZP;sKRqKL+oXl z#6890U6T&W1XY~p!Q8mo0&ILwCp?c^=A=(82|Zwza+8)gT-JE;!Ayo>#Gl9JV2`gD z5H!mOT)6?L*t)^{Xth$zll{V!7!NOa73QioP$5U6d^D5LXX{#@Y7(nkKmy!=fId#- ziFFX!fw-K~9d=Jc_**gpK$}i1obT$OT9HykB;Ocm2i`z$&?Y+4fQ`yFROn^s3Mc5N zK%z8Pcy2xqxLuUJDLz$1sX4w=PAe)0+tc%X+phFKAXad~|$x4SXD z2Wc+!6%%k(INNl+kN|}U7FCj`Gao2g^>UdEBFxz;UseaikoIn%zYxvmbPM_(-?_%7 zy#b!j4FjW}HI#m|D+q%dwq}5yCa?t$!7tp&uSN?-Rbyc4^GWqG?cq8mNxePH9H?uM zM0{{VQA#?5@nhoz;nlhadPcb>;Eq}hY<1vu2w%l0=RfuoKs%(#5{EbHMrmWYQ!-yt zwVlQ46MGIY+xnSUKbEhNyF(!7Nrf0Ccy9H8Aop&zEkX|l>_zx+jneh1a*xyX{O;hJ z#CSP(I6HZPu@xSjDGRZ?;0A>OL9SYps~_fPw4EG{?%0Q25taLx#-|vk5-o6pK`H_D zAeZPx2j6+6)5QpfQ$iN!NhdC_ht|A;pyBegfBbide>bvr;j*@71=->s{n|N7NlDpJ z*xeH_H(I;e{3cj*kF8T1^Qb;|gaRc)f#mXVb93|Zx=Hp8nb5qrV{L}*4wS*SG*U~1 z=P|J>iZHTwQioB0{I$7><67>0WOt@~Shm&mtH0DLuKU`Gl1$qFoO@>~ENEJ`&uLYY)5b1}vN zQdD9R-zs(ri@Z)UdcoQW?m%t-TCH}A1ZSD))&1O7mN?wUR0ei0FibYH%v7}<4ZN0* z)Dm0pm*~^HUc91DpoIkO5GSS*Tc(pC_*1gg{tCc5jTkts3;__vO())*W2ORWLTZU3 zBAmD&0WbB0Mc+4E^BD}FWD{cloiFs=H5$-t6fCMLlWc=X-Ck^K0w{Cx|8Qeo`WEMW z=NDp-Mx>UgywEEG!2T<4F&tN704)YC?GkYf^ed!mAKlBgO*h5^X%uRSjadr`NrLADmhP&TIURHPFfya;`{?*-3mZPEQD>NJ^l?98Q=cU+yKhLto zeB87HeV%@2}^<4shf{`O- z`*p+r3NP^&^-4S@B+G~e9PIC^J3PMwP!1w|L*gp9z|zdP>}t{#J6Mu(_)2_=*IjL& zRr_+MiIIaZUsm(FwZ0a1v2AVdR?;pP548~r4)A4m=?QoPK$}`Gz5JXR#Xw=r$NV$!4WpsJ)jr ztH+l-9sQ8?#&yaJ{n)B9nSV-d3mytfZbZUOsRu2Y{L4MJd}~U~4x4`$6u4HTH~4w@ zo^{w%U>c3&rvwbvb$^WHQ6`sc)cqD%fG{Gm`+zqVTNB`Xk8{_Ed6`okKbij#_P*l5 zm#FYi&*4a;uX7JZjr<$J4J@9G45dBd&_WXLj#hNLiUS*uItd%O{GpAUm8dt)S)RJuXhCRpwjoH{I}^?h_hcYL4h8*{yNks#k)f1WC-{@fyg z8f@KEk(sqnbk<;=oM&Mv9*dzK5u5^<)b>zi*P1LQ;G`j~NEPdS|Tj#Ua|?mA!h+Y8&- zx|f`dji4&!dn0djlDGBngQJgEq$fJn{Br$H%(iZo6HyTYg0=B`GM$ zy>>nBJ~Hap^YrvOHT2KRQO;Y+n{})untL3-mziWoNo4j&<1-c z&k0;1NB=P6!FXARPM6tJGpyrT^`|C&bEs(I}7WCJ*#C5-SH$r5edabkt37(wsIx>}tCl+iojs0-#S~kp20Z8`MeSU$S>>p7@F@H9GOd z9t?O0^BEG-xdOm@qnlbe+~oMr7=-_g!POL=ZJQtg1N-6J?@cshvT-&=VBqfm5J%U) zSlS&dIu>c;`3L9qsUe4BEA$t|eS|sZTmHBOrgUwBEVplE_TK{z%Tne2PxlL}rfVA- zBW0m5bf@ruvK1wFqYU(~+vigO!}rq!21$6CAL7{Zd!-{t6G=#n0~ys=l~5 zYPxJ83)t?lxEMq*74*&CRWjmD&6Z1wk#4w2+~UrB>cw`@WhH;l-mmYy$n)Ui?X9hVqdKGsv%-tx)qTE@q|nZzkENTRRKnJh`5l%nTtNki1m9kP#rbLl*8J@E-uHOqS8uu{*R7_@i}_B) z^WC1NrrmD7t;VxWy@1{KR)QPM-#^Nm#w~^jH6EX0n=a0`0%s7R1RP5V7`TJo_&F%I zOfjC-U^(A8*}H_K{Tf0i6mYSZ3Q5;#7xp<{=WFP~x^7)f&B?-hJ!W}dTfyZKOKkmq zujaFs47K?>r%hU%T)PxT?WU97z{bPzCq1QdFODObhO&eGv@;%I526{V2J@!teiNoAU^JW~qXa+n7IVA$nW#Z9e=Vi;~2= zTB6j)>i%b;l#7XlO?aFvniI#5InDi2{v z62nK`)VITx)$1J8n@aPuPH`Jt@ftW2?qJ9A?UYL((BwzHI=csQ1uUD;Pw3yB~bEZUi%*nEFM6wXYy zO2lG*e4y}O8%!mp;O1vi(`M5{@KQMCcihVgYf4Nn&1wBvC7bV6&g|GKdXDn@!>;3u-eBK|_L6cccxf z40Ec*tx!qaY%};BDkpIsB}mJ<=$dVPe-~Wfi-z)Mi96q z?F=_3UmS+{hZ;pk8e1Ill@DA9>g8bOHZY~h|ExQjtdjzeog524V?ZCSVCScpB6WLv z)evW9ZEg~r{wpDbPQ#^GI>0X$xK3A{f{4{ZBv(1Tw=-*D%N%lT!$pNI{UfUVl|Jd5 zlCIH`izqPZYwO2$)>DxCG@V;DT$yM=5Pe}}nlLja{@%-bt@iGd4v;CANe)PLj!fYD z*0W9Ban;XxIjaS?S;Od87W&8LY8Z^emT4AB3>rGpECtYGgOXG>>DS!jefip_CR_*OE!}yqi=58{X({`cT-_X zVDeBQo2v9SSQ2mV447-h_Onhpw*piT2_v*&;2p#>zt?KLsBYTguw&w79Xgns%y2+= zf>c76$Z{0k+b>Tl)xsj1DX<2UkL+ul17IkpQ4@Hm?J*kek*8a47sQcp=rj>m%>uNM z%_i_{TVVl8fVvhY$)_4F^VT09EKfZ)Ajn|2fFiRSefkFPc;HIj3gTs$0(&0dZl3~a z5#5iKyFw*4hhRyHY9b!b|E(hdhDGkgKv5#$o*>8;y%PgVtA;Gc@(#NiG{aJhe72#j zuet~wZZmmpgy;f&b1_#SQW&^ro*6P5*r_nND<+~`8p_YLU}?Af11E&y#haHRcrLO) z|A+8r!ckDbrPOIaup)bYRe&Tih?3D)Ups{1W=GQXz?dZ)t5ap zhgzh~AHhKX&}U+-005TDJl%jm;rCjLq8W}b+Bsd@&`?w_Rl$F)uB;Ho#-nLJ z$oYxUr4e8FaG>(`cT5tqT|*x~zeADl)ZW|Mdo%UL?(zV;n{ugRa{u*gr=D*z>E6O!39({tDzY2M~}bT!k8mc5dHF z`Df0ik2W_qrvop~Z|Z$a=<$8-bc~Gg1s*;PJR{D@BU*#2$UY^Xe7qv*v15ru_WCV zh&qOv1>G9bmE-xS7gx*k@5Z_|I4KV zti|Q*YclhCZ&tm_lkb-`O>#N6ApX_-nK=R9>9JyG{Z0qtR>RS>SL5D?qQ=wJ*JKL9 zbjJ2y=$yVfpbPl6>i7EWQ~eLap1qi-YdUUcd{)1+7#|q8^Yixn`-cFvDSp~ZwV{zn zJ3OXE8O`e+gXtqhX9qfcsNY zg>$OX$x}blHG{*b&S`iLQ{>4;bo{ z!M91mE!@Eghf6=%A$!b%WBxVIoRB(DJZY z%}HzwsDr`-@-Rm2omGpEXIaiNd7W8P2YYiC2cM`8MnAhm2R!3$kN}S-kp|iEJ)zct zzq5*Vs!;MvQEM4D)!9wP@lbJQRLIkANHk?y|8s_zjCA$5Z&6tkV7W_TYm}ks-H&=Q z(VD@!+MSv5!Gvg-@M|JFWKu)zHhlVYfl43?xA%|l<}x_5#Xf=*BG={Ir&@pJBm#sp z^UFjx5Jvmg=*8c{llYBZSveClZ|AEgs+YgdwS2Ftng#=S`A6X!(V(T%;xtyI7qMH1 zy=sR9#6^Rjzj0!tL$NBuoiDYZmm>W7u0b}A1S~`FC4xvJno@h~^kiwq{lyO<)Y!21 z(1TN6>mYh!o<*hj3r;+M$U6S4jn)d@A&~bwdrWnO0a%_Tne-PY$J1gQAI2?Sbk?3P zFu#Wka@k_cB(dI56rS8lZ=^Kmg$uIpZgcFT(t1)?x><(PG{FM@3Wu2r(1^bc+5Ze4pC7GehYDgUq#CDdpGTTU}Rg#p0t> zWgrrB)Xd2NuNDmodbIPjIN01p)07T8l|LurvLp^ev~!*w_F{CH@GggB)7h86(94UNdvrx zLdss3sTdKq*0JHAj*?%j=IieH;-Qq(;AtP5mB{b?;@6}x-L_C(`|*?V>lica25Am` z8l^mWjQ13LPL;Vpm-AlN>-Z<@6J|%|Ve)lP@DH#4p^tx(8ZT}$|3Bw5?C6dniq4SF zwrVk+Ryx?j02!M-Aw{OU>}|Qt(}SMjDp#T0K*jyDz;U-|`Lv4&FMlSSsl_1G#FOfB zH)Bif|-jBnL-OEgZnR?ywPrUtis=*m_4 zU4L%SRN4p=vK^PTWK~htdSy1g;Cck18GlOywJg)!Sz*#eM|OkhW0v>()Yjtr}u(F?G)gKav()WFT{>X*K9t zgVHu>a_3AGu6B7!?~JU3f5`4mRO&RyOT>S`cB#KDkeuBPAEpqY;~-*D_16g#*a}JK zvO}WAhrg=C1guec`)m(id&=7HZ0J+hAN$1Q*9sdJxK^-xCU;M?|9t$ssyKIQ)0Kq1 zoCy%b=2uzhu%O{FFdcacHK@>URy98O(u+GT6} z+F}f%?dsEC#jTj;4tA(3FVvM;=5<0=dsiOs_M3`Zm4*U%qO!aLZ@IChh0D`DKf*Ds z2E|93Xmb_n@lpPbQ9sStf>fW_CnqW|9uUyKOi5Vy5GO0P`H}71=+>@yIzC+nvRx3J z-Pbp0*Aa)Cwbg*=9LQ=lcvy~Wg~-`EbmgA!7*Q0gVURMXK79?HE1~X&4%Md0!r-2! z`T}($gqc-k69(l7cK3lIytlQ|F^xyO>sjd=eCRXQkWj|tl037OCYicN-UdccHb$`0 z@1j%-5&EOecz7dxF484nICZr!E41H(u#&MvYY_jCx$1~`z%MT^Bh7Z~W@U3!=F`ut zwRw^AlnwDXN3VSuuv!{Wa;P(1@2!b9CMIa{rOL>Cv#t|)+gK%d@~+mHRv6P;Srzr@ z>XO=+Y?W}W^0txEqfzN};^&-L_|0vz_`Zs66AWuskA#ZpAvu+R|5ogTR=WF{&e!S^ zc=CAcMY5RK#j9(%8j6gVwN)7(CsMnH_~8ngFztG*u5+bx5+40;-Z2wUzF#)#iI?9U2Y~Z1L2YtYW2|XF3Ys zhSn#HqFOBC=iUXWqqb!W`+usEchZC-XWJnP*=lq`MjK)IyuT&v+q}Y4kADYN8T= z5MnW=3X72x%kOXhx%u`(S+$?$m<*H-BA}nF#Y|Mv$ot2yrK|ODj*CO!!84?VmL#F6 zedu`bN*xj*{Oid$f5TR>O0BC|ildC}GyaUnHI7sNuQ?bhM1k0RiB%+?;3c>$|sDb1>HFx^-V1OvFnFS zB%8Ec-T$j#EeGM$3s)7zZ`%KwtA6@ovm_axH=ZYja+75IGG}pb8zJ*cGd1o8w|?jp zQ$IPys&|md(=^V|XPT;ZzyK|%hK?huF!2oDQ@l0uL3b zzV(&;xL%~pvT-B7nGyZ-fx}qJE9LvMT2)0cqcY2+P!f`t!?C*iT#m$--k9M$Z#rq< zI4>MQCss#M$MI+%l|0URce2F;&HS7A))je3q1e$)y>*LrH+)%sGU`&ystU%IwZJ=* zxH{_kJ>Blvpc$EEYJ)W%d|&7Sf#jdN00fV9zc3oA{#^XhCQ<2bq7qs-iMqXV7{V)m zJh*}T3etxSM`*8zh)q1x-~^A?xxRyq*C={_=Za*&!?I;m{O(3bbq5*tZ*%D1{D?}~ zvCY#oN|~~vHD0pNU1`@3`ea`!oyPQr@{v9%4gNO2m#m8p7Dl#W1yMqbE?V?ngV9BAA$k%7qj#eX z8RhJJKELld*ZJc;*ZaQboImE8*?X_O%CnyJ+|PZlH4z$WiX=n~L;wJgC_Q`p0swFp z!4HH02fP!Wm*ES35xPDza0dWl%D*27kd{sd-o*D%QhkCyLqJC?Kq7YGFAe~#fYRd! z+WLyS^AD2pvTH)jTh{kVo~B~m60jnQb+83iXY>X@PA%SXedkyhLaxoKTw5CEo5=(K zA<*kFLaSE>2}fAH)!L32_+djPK+JLV%7FiLya^!iM@B!MehhpQ-!+;F>?KCyPei zA9X*oLYcyklEy{9jaYrQBx~O=$GFH--;-GEeY9MS+&+xNN$^Q^>D>Ls9JVxxRo{}w za?^bI(KjV=ecdxe6Se!JhhSl6%cRI?)>n77(a%Pgc#hBUH{Nc`;%%kg%7;&tYIlz- zxD}+{9-Ga7+sb!;Q1HHr}0XOxcMSm)+v+~3eb#oyUCb;iV~1cWYi=EhLigz_MYr0Hl68k-XtJF|WW ztp;PQFopuRPsd!aT2wQv+SNkBYMK#nzZ$av6V&0AWeVz?AG6;E*NTmDFqQU8$+7xV zWA%QIMClk0)xA=j3jpO2?nPBvh($+Dh@@!>S))n}I6 zjm-_eCZB&ZcZfeJ+T*sTt*g9FDU;GFU-wQ3%&&6nqYg8WgE|M-2!E~$sBzV|HD*;K z?AeXjEs{^&;3K3ARN`S=vXYP_rFh03cZw5qRKol9 z5OYJ`3oef35@iq8FCDg1Z+%+9nB0%7@uRA2S$mr-SX>p>X;D2KW1iHM2Bp21TIcuc zNW7F2Ppa{8oa~nbmN$3oiuDV0lvbgS>?^G-AEG@q@w8C|f5L0fb-7o_dW2|MjR@3) zw_)XWP8F@9TWR{2K$IUUp_aN8MW18dIQc#Qn7xyD)95ZnJ1Jx6?>w`gQpZ$a*b$)M=cZKaDNp!d6i(0OlY$bhpy;$zH55>*pF*P&B$?6q?Gmdh3B|LhBj=y_3 ze9d>q?QwesKhM4R9aOo*tX>fX<^(neuM0as!tZEX)P!&~mMTUkvfQQGU%hiX=oWF= z3vtI9KgnXtD#6;o8kG+ErwXra>vnkU|C$L;&{>>BHRZ!VHCDi_t7 z(1C6Z&>_$lCZ(e3?q6d{!VWC;dua*6ALxtlFE)g_D77hlMm(~5F^DnzlQO3^z1T3{ zz8=6W86PA=wa3l!cKDiBFXef3EX8`*{S$-CeeEAII;?6`@Nd`{=A+%X-C$8lMV{x+ znPISWN8g$tm*TZ5#FW$d#x$t_%Q7O>FCg+B|3WzYo7|9=(}DGcm$5nb&s_bKx-SAO zm-QOduwA2?i~&RY^KtrTdqoUcc8vkIL`Iv41_F~AvgSst&UcY@g9X2plyuxZH^X?h zWd9@}0tG3vj;Cx&O;8L8Q#i>6(%10hp`V*3m?T&haZQZz;Ffgry}hjwlRmtMB=h0h z3l9ioEbYg&t<=aqrMc8MJu97Ytn082@D7N-2upugB~&(GEC)?}?^P^CgfunseyQSA zt}-35)|3@3FY&}sX@HJ&irTa-kQU96F@Gn+6MrM+v+wObaR$!^@0N&Z$ve8ruLYR_ zJ;Zm8^D;ajGdCUx{VCi169B%%=*fbBl+K))eXFZO^acR(i8uH(%&zO zt>mX5crE)8XfR&8-~l0R2Rk6JrA!P^f#{UX-rTo}+@#nkE)TTO{8LV#?t z>nXyoFSdfijgZK&h$C5*B#siMWgPQVD+^BO^W-!gi}W0dR@FwhAZlK;`I$ux*x#2C zq#BdT{80`_iqhDnwDM^e9ab})8h!mlL7KhQoJU0@X2Y{_r4%}^J597}A%MbD6m_hb z;xe92{yUcCPL+sxV5Zj-~b!#SneIKtzU^$y>zhn#?&cgrpW~Vz5VGU**JMlg}psigiYjLQ2bIIGT zzyyK2+X#H}a>PI#OcVgG|BtD|CYQp}%$8Y1?fl0z*tF2CPrvwAFJV`?%JQ=@H^7nj zkTPX&#NEHur4_C*-?m@m)CcqRbU0Ej5#Y&vhVkCfcUHWV@sip*dqB3=w&io#>_8W0 zo@sj?&-5bV`iKc3H|oBI3(LR9vCy1fCdw!^x7AjP$1A<8Z#(HryE!z??8M9O5pvgZ zmdx?|?71hlEw`Sjc}1sEBSG8f1*h0WxwMh@oR#A0-!_uoCd~@(bC-mv&a}2z)nu$T zf2y0rlYft3lJ9zAfnG4lfhkYRSZfx>e^Xrm7U|NZycE05O9qRwt;IIZj?# zu7OQQ8pWqsH}JTY!$2ezH8Eu>H%3dWQWA>}TR3IuN`R`wPrYb@Lrq{~8kpsRX=y^} zh~zZA=U!DYy-Fzbe%sUa^Gda|8KH~oEE&=}OyOz+Pq8@ew;8azNE@?q-daP}0ZuN6G1#$U~wtr=QPg;z@$bkPd8S^P5&N zbS%&^-rc$hcQT5zk}p zBy85ckko302_U(0wU=4hHsk&Hc`Nw?5@Dq)qFGc{_4a&ZFif87e63uUnnjO4pIb%o zmdifla*ZFW%&{dUd^;P!P^C;#u?-W;Mj|F+mj-DtT|?A zkMJ(~e9W>CY|wZv4eK6NWyEq4V_;oIDtk$8QAwxq_5KU4U{20_jOQ-hB|ukN|uDOT3G%c7&Zw$iuS zWieo4to_;XEEc^Kpj%DRM?%^x2xTQz_WP4 z%3pt?Z=UnRq;TCmP{*E~pK>3{atRwSHnYjJ9Uvn1Z~Izz#=aG;AgvI0f0;8f|M(-L zC*95Vr7N%FLIn~SSRkUcRVZUoP)Zvs*!0a_nVgD&zmb+QY};=d9x^7 zIH+let(E_%Fgou@zT@U$VHwN!dS1^4OVZYVuIUe*Esork`55KJFEw4#DLn*r=ohmq zzSxSn%dde{d9g&UXNq3&9vRw^!Oc}MG|*f7J{Xg0%eydExpL`8()a{1KVW50TO1c! zh+Q^WdgvdS6LIC|)w4V8X z#l^FBMBQcZ=^KQI?~ATbMN2Lc1|?QJt?4Cf zZ7<;Q@6;o_;hJ?SdHRP<-8?XVLFiB=Z<$7Y12gKGZ+p2RvQDkRA-Tm$M%}Hq`p}a! zIBID8!xD{s{|-fRa`5_OMtk>u4w!=Eb+T`rL3d13_O5mlS8RxyivoURx%TCsh8n2M z9*#W`FyOu2pv81w?v7lK%l>w9UfFcP3l7bb5o?Tck{(`XtXz+Z*Z1IC#NB;}SQYA$ z!vU|z=Sf%$x5_t_X%?EKr7QMIVt_mcP2;<|^&x^Upm=_tz9vpj42XPH^geX~;dDVc>U zq#9MuG&Q-{DvWjLrjr(8$n>`L+oESp3m0gXU~*3+I!gkajSD$SY~C5bmGvc8CPeX2 zk3Xj|HL%%LOAm?IvRN*eF1DB~p2oL`EdwS^f!)+EK8H2?f3)EwqHgOym50_Fos%lx zGi+o+E6k;LBpTAg;WEoUtIAg!ZRT*|CnE50kKH7l=#i?(+DqJ}vcAxp(eJzB?u6UU z(P3QtIrI&P3{Hy;XaT?{Ek3CK=RvyA0I zoQ?sT`|J?IJ2bm<-L^WO)y!W>G$rnhh4{R2&&uxJ{>Z^O(I9O)`jvrnuR^eHHY}#%%tNra< zT+m>gD~w0w1pAnlDjuh#6B$v?7>itg!Ob!49KeQ+%~Nt^@|eIZY_1R_8B^ zwxD(a|AD=8hKr?1ul|{KZPu>+ZJE_tl<41_91A;(Re=Up2xc=Zo_C#>ArX>2QAXR8 z%T$Tn7i}dZ=)H4i-cio81gi{X-qgauFmn)Irl0 zBDgcr>bmezFunMJL}$X;?Eybov$sR_vQ)J1$+na%Qm7laYO%U)Bl*AbI)rX5ja~C- zK4oa}NQgdjg-1qJY__LLz0mi<%*s8XJ~cShGrhauQBgDCNV9=0e z4pTHEN4(9Fag`yzlx>DnosREnb15bDDQx)A{TOjbY5Fh*I-|LsQDz}%y!*>p^9Nod zq{O(glN~m&Q{lWBEIQ##e+5K8lYJ0j`&!ak$;K&4OWVTywN*9r6Oljq!M$Q6w#4UV zazegx()ds@0}7AF8F9dahQUfC5(WlmJ=k=K6N+9a73C3kC9M;wB>F%Vhu?cAuk|$K zs}Db$KE3`)tUL(%6*|5l?eQVcQM=&Vc&$gqN+Oy%&^xJ*!XwytZqvr7L?YgXXS7e4mp(mxJB_29%brOkpBT6n|&B?qh%v2%b(W5r+ z-0uTGph^o0qyR`-i1M8ace|7KcYqKWIuajb1zmqh!T&XN>wlr0F^H;8h^b0b1AiWd z;C!)SR9v6KU=vAzjj3Qy9H7gzat4F-90`LH%#<0>WSvtlGw2 z$}P=G02W=cqtYY_pTf+)D>+%1;&kvaXH!ySd};gQO=$^{e6J^~Ko(}6vflW1Bku$T z6ovjr^%EPF_j&c_k|0(cct@ZSQh!oiff*wPsL8Vd60L2&TnE`P!Vo$L(f1O$=@U6W zNVYT%RkqTAXKUkrHith1i1}L)-D7aPwwqrciHw!yn*t#qcSxJ)Yx=Dy2&9Ah;wz;f z6PHyP?(=^iF^vD$qYnVy20pQTh%+cqI&Ca}eZ2S}QyhR1LiEy% zW!vxXBYGUFjxVa)e!c@yPFr|@BzRf#Z?6_DKy%4Q2jk-bgJ92}o}d>$$C?62X7KH? zHqXF5SmCc3V!#!bJLExN*>>PDPKODohZ@C{ZF{x7b<3j#7QxFMp_p7XoRAXm=Oa=% zAITb*MmVE@Zf5)B=;$b@-K;Ws(7uQk*s**F84*{V zz+f{9HZd5zb*XhfgBiZl919)bSI=X>_(5mFihF|G^m1ftkv?^Z7wF@X$?rHv8i{k_ zo9Ysqw~>H!?-!i8wY2>&rrCR950N)I(71R=J$yd+J#!jB>&&J1U&%L{MRpkYPVyhJ z{5_VmZ43u^^B+$*e!HIyY~1{hD7=Bc@Bs2ZN>{x`3;GtVsZLM@1#m7W-|C>fv-f=R?YcXP~u$+OG$Kc%=lKdXfR3H#jT( zCDU`A5;4nvhdgj)lnH07wBv|<5mJAEi}%c7<7>n^3&q9Nm2xCHoO?nnP%i6l0WPpW zn2-i!x8{4^A7z8qP6~W7-i1Uod7_N5dBhM*IAmTeiy)-lxJuejk9k|R&tLejQ7;4J z4$(fLp)i@-Axz)`x*(I+F;jmSZ$* zt%^HrsJV!9w?s#96E)N zH;NlFVw-QjzIwT4#M2RYW+c0jRTjWhDU1nn$#rpCcMW^J4Nm8M|IXOrB4n9B<9nVh?B+kK=x*;FmTVXfmDpP9=ZKB$nfc0v7Bs}3 zP2qt`liBY-ryqyDC{@rF zj1NL^nh8`NGETTh>Sz@WUG4A7s$+}{^-wOH=aCklaLfpAOstr@umCy^Z5QhQCWQG7d>4c+<{g< zEEzNgH`rXdGh^RArc`TIIA$4KvO(=emQ?(4-05_9{j3TQHB3;u=eWq*sOj~ixDSUh z2WNS>pcCF|dy7M7;boFluzBLQIf-ZEZ~ifzJ3>>^PT{>TuH^jaXsr7lxRCQ3YCft@ zh{fc}%AwV@WT&EZrLAulk`f3rhs+*Vvxc^AnWz?n0t1L&Z>%7FGi}>s zi6z(1NQnS_%3kj703UuZ%wx7+lB3WANmxJ|o!BrDdmTSSxC4>m+npe zE*jfKLZXVKXca&|iLt&L3i`bA(FLP|cp zx_Zors1FrR0_V?EcCY8Iz+RpIk6)?22e`Q0y9R0OhzPEq_rF4r#9cH_YzlV6FFf2x zI3=^C>cVzgw0B1! zo=hQRJT_9apWdA@iBdYb0V`*=|l*;0C>vqzjP*|?BMyHA|&I}v(nu0RPg=!bJ!K#1t=Y}uX@ zO2&}4dkpoDxvD~do{Dn!?iaqlb#6E{^1;YeL7FRzU!l zn`ZYDyA>@l*f%$?-kr8od`Ut`q!f0IKnA=;5pBR43*SSrEd({o{m?ycb)b8mp2$YI8@Zbp1oj;`se zlyAeb9jyc!&-K&TCBDH`5&`6MBY8C;yABbY1Z916)gOZHl#X}OSYp7wsd<#qfF4^UM2HMe9kVVr0G~bQs zI$4|KoOonyhl$S{H`w{t?e%p))qwSIyndIXYfZ^z?bgAfk* zfuZf6&D>4=SbYdE55}^8Hi7>Ec%bQjJOu$B@OTU4+g=RX0}8nW8h<{wy}cV8D*hZ) z$Ek6-0}-}d`xqlzP-4fyNeFtk@PNJ#jlEQx=r&>o6r#>7UkCoVyi6ov&H(_!ZZn@I zt@-vUore16<1ymnlKIqG<) zy`ue0XgJoFQa(;>rj+%3jx$(p(g#Y5xN=pEsQTTfnK!)I$>ncczt{}nE5e25a9~vFr5UfiAr@LoCN;k&{ z|E2}$#LTHcQH8UtW`jgF7$rq3(%He`taVqql_1^LAP;f5osc#$U?BVD_Cfj*?+9aJ zDPYY16%fAgx_4WXy@P0b=q0$$z#*YPzLBg5B+dP@l+oJEqsB!LTi$l8) zBD}5EASLVy!nO;Hf9NVmowkxo!XP&aFv)d0zq0xE0lw7o5e}-D@cya^pwW zk1m5EG+hNv(dnxo>B{35S9~{oHHmj@zkOz65j@;03Kog`V8{je5e~+cmB*Z)l|+a` zR7pr?C8fzH#9B=SGl-1&0=-eltSpxGx&8gh5d!{ir0PLdH6Cgqd;%X9^0Bp_v%B$H zpLyA)6~Gx+(GkIEh~zSS$@k4$Y9b|F0}scu0yI-LU#2$6-)S|O8g@7CDFI^jWbegi z=asXx1IS*z)q*>*;j9XcEEBljZ(rwWIW>gZ;e!-oEV;@asF55HH5ma z3%_|?V>p3qqW`4&x6ti}Sql;nfK2hfLc?n*Svd%B8%&XMDF5MW0C1B$TOZ7s{~@p; zigy)+&Hp=r1(;)io_8R1xeUs1&l*)+hX4n%xZJuerh@Cn6E405b_{)R#=ZiO5B|jl zBHuUTO(2bpqY2?!9MxKsy%$}4Io`yCH-Dxm$o9cw|(N* zz98L94)U@$da^~E*vrE++*gxrdS4C~yGNGe16xBLw4fTb?zuQMMuq71f2kF-!L;VI zu95}VkTzA)R)y)wHpGo3(px5lx@0sH)`rA{E_>LG{Jf0xD(*b8D#(~`4H3uX#vH&0 zPHtcc+DP!fJo)hRLj7@hOU{Y>{N}B7W0}^DlDTh@N8J;T(=8O`VAXSOi>XPyj`+Dc zO`H(r?Z5}j>Ke`;8TBOkK4lSm+yvs2dUsy<8U5M7BO=c>7N88}&o^_~>=OheR{I?P zVXO*LI0-7&Ih4eQAo4g2_U+h1mfx#^(7r0YIyTVrs5&6##>=k-!bWmODW2#A0(Jro z{w5nn=d@*D&Urg!msJcN+%5q8eGhP85ubn?BB#0FNR$~O7mn)=f%=j&>M}*P$|1FO}M0AgV6}#d+w>;BSqSQ zM^{^&e@-&`IK(X}{%KlCJeVa7(OXKSJE^7l!oDjCYLG()c}AE`Y=_~%i2Lu9T}zYw zT-u^2AiwSCX>!`~h2oq=8t3{P_HvrOBkKr7QTf(0V*^(SJh3FX7Ck0@k$U~i@8rhk zImwuj#(fOm9fenR!IoJ9A z;FZl1B`fvw*iZQY-LJOFv3ApqP^%)m{wDcPoJqc7v9s|Y30{+L>V{h3O%?xu`Zh{+ zJzWX6CuFzORr>8Y@ObFL-~(kB)mIm}cYTxz>HC=GV+Ul?(`0_Vfij~Xc1kR$ZMh@H zo{(V;6Kkj8FqE#icP;cz`g4zw56eibbdJ320|O5E50@7g8_|;+3|GTP>5M)N@dk9Z zAL&9x1Coa|zE#QFSdJTJ*z4DP9e9kv?5wP>ulL6b9lryt$FP@I0diTRTu1$y-{1q9 zw(t0Jq^a)+m{>IaNnbKbxTRAWA>6$Aly~z)V1;9QvJ4ExSnN=x!n;N4(Hy%pM6lzN zHPUnM?Sp1LqjK?l*OElK{5%d`LxvKz_LbRoX_W>Ik@+2&I4cLy&5_3cNGz+d&wwZl z5rQFY4HlmYZ(73YkN-r7AcqSI$&-5SCCbXA7Hl4!w=B3M`se1eRVB2k&;NRPyV9pV z_4*dXq`!q`cJ6kt|HiGkZnD{@O0*u8>F%5h5&S(Qh!LcMlqq_LDyGA=AF5a&E}|+n zrcK=GuH!SFN5@6KnzWac?_qnG(f`6BP&%G$5T2_&ZCvGMjG6crN6P$@R!0m@i1?5& zz@c`pw1sw{yBrbzNZsen3j@iQX#~1-E1w+in~2H_<|qV&i+Rs-{GAC|i^udh36$dG zWmRw1nB=9>%^j!aNa7t`MTEP*D}WC3B~ycZJp6B$AA9d==OzIQs|^ zHO}7mnjas8xZMzE*p)RlFOZB)*B=pTS^4(y`4|45i&iKK3o3p#g+?<;k$n=~6dqkB zS^0ExpDl@x)eFV6CzUNwzN1o9hPS?VYH z8Oa72B+{e-pYOen)cHlrnH8FWvG50NgOu9O*9S~&ATQy^D}8+`m6O&zPX z^Vj8fo<`$;wS8L}LU=Ve0*&YW{@pm_AMq-wmH(;U5MfiZtZq-i&Cd0skP zFk}6X>6y}VTmB8VPG3o!1m}S{wkw=OlHB_o;v19v=adHpSN&U@BIjF^6OI{CW4Aro zO#&Qr$iV?fz0GR#c$#-Yh!5sVu?Ovvt1e&so91fD<3az&iL zXKMv$lEGr--Y1omBV8tbSzj5%cT}9ie4Hb-TI|x=7WUVV#^~1sJneZ}bBIaN+};_Z zXGnNtApFyEf7YPS9LGq9FAEQJ}wQh>|7P|E)ciZoWFwkW5V!?JuMGS(-e9{)9k&0F7UWQ(C_o_`Mjdm#LSVHkJkmcEhkXqCeZ|yq=mF-a zwUrh2fC4h;Ni-udo!Lxf%F2GxG_LUpdz*CBYqUMiRA`3nEwIXbPQP?&a6_fcgq+Z} zyspIM%CW(Jtt)9^98Awal0EpuYnY(yKKIu^wwYasvq`zA`*M@%m;l)FSGfz$pA$^!cx%4QVP9iiQ>d?N7Wv>=>4UKrQUi)l zk3YcnLK&Zsa(EE3Mggn#U8m5;y{9oun)BlvGO821!DI;RimcoGrD18U(e0;Pwiqyt z*EwKHa6eaCLZ((Sq^~VTB>v0#=3Zl0I8?KAs53TplmlD?ezP5L%RZ3Obc4Ou8XWkQ zs|EkOa?bKEA@tZcVs^m%x^6F|Z zEH0cI_Fi+)CDASo#0AM1FF$x??aYZo`V4X7*SRGBTR-v+1&FJ~X!-M9>O6NJJS~s1 zm?-!?aL+EFWhz|NR>3YXTWO&blj9evKvC(FCN^4||Y3uwH5ZH#IuQitQFJ z?VX;3em$vW$sll}CelF%8Ax6t!tUsHNiI{niR;YksN5_d|4OTmuVVXN$#|4)FZ5w% zMt?)iney}ppB^o(pr;2n+F+>>Y9%fH=PER_+CQlF;wk!OPG*^+)mAv;=0joVTUn#) z7z`*+Z{0Em>HgGCCV5Q!^6wvj*lR3@dQL-udW?tp0(37MTi0S*nU$3V7WHfOV1|8J zmwP%69!P`{JG~m37Uhgb64PJ{8nRw;BfA6B!9@9E>)a_5R?Dq)QQ0_FdS~vZm!ZW% z?#Pto%;%}n78jES8wWvVe|i3;cXZu+nMAs_3VON)k>?%TwpL<(x~X0&Vu5ZFCMeZV zmd-vek=}+dKS?skpytgPfnK`IdeYr9_h&)kB0iCW&00UA3g^jIQCeIq%O1wD*FElW zQTr#pnSm*9^2#Z{7j)iZ2z$`P>ETtlGRn3&X)PjF|NBNV&yJdsV5YA;)nIy4>iGna znazl3Y!~<_Y||K8)T3T7+A;?vyF)d^Rgx#;)|2dqKEQtN-kR&b@Rh+yxE$P{KSWFk z_mYYPo$7~s2?eRD@IT?2BMT+khos6|KU!Z3ctT59-HDxb;_+qf)h}CVN=RtL+x`e{ z*(|@2=VKxgwBWnJHo=sg9 zIZW!4S44Z;F8P*<@Rrp6EEy{E3a;xYuK#V>-;A-JzU%!2pQ+LGyqK>=XOOS^!IPQg zR1PutNT`eN1ruZMm_TM1S8R2s-G-lf8+Ql21j*?UktK^7T4LZ+&HPK~&x}2T?Yj2h z=XFG{=BML=ynG#dlCAg%_Q!B`2YMWl^dX@e+ z8B4f;J_BL-sO)!HP!B?8c48H#E!q1EdZd?L^dja+Z^F#N1V=$?^@(oE zgopRc#?}&IUmqeOn|d%hZryuHv&lP#B5;=AU3(pZ?8k|k#-$Vu5;uy>Dnp?GN~iqi zcf=m;()IE+Z_hmrB1Nw0(`awn4V2+#OFKMLH>?p0RemJ`>U3sr9&-m$R9kJDxd`yoZV|1{Z}6~0#i*iT88w9Yx{9gRTUO$~lIPtRPv*Oe$|K{XYs zIuFVh&#Oh*2Ub`=2#@Dw9xO!5h+R7nY~)x6K&9EYlNJ=U(d`H4@oS@bFvy}|(6g;* zhw}lUOnQE?$~(B+Cr&2)qiZuW=L%IQ?-_dHy+47EmnGN8nttI02VE#lK!LfhvC0{6 z0lP3T99q{_-GC@t_qu4bZ;UhtowV)bYia#`1=Rky@I>_bvhah0z)8gn-1<%YE`H^O z=$?~#@)@bJHOYK-NwN7#+-7JucPdV1H_@`>?4)BR zRW9ihPRwq!VP7LvNJgfPTxa&#K}8cjQv8Q zE7i4Z-Z7Wb@Dl z3WK=5j-STXmxO}*WVk2_Ai22tw_b2!?xd4|2!Y1d#&Xi%GWkL&k{fw?Qb@3_^ipY6 zKp`ShenzK^cfaPwSMu!1@eP3?c1oZ@vTZ!;l9$V?<=c;Uz-k2OB6F`W%E5ses9k4K z@HB35cH*66ByPuU%=46HZ`qA!pQ=IG@ER$Cj(Uj>Z;Pqu~Z*-p9^dC!Y}^Hw#js>jx8vumEYvh8`$3xfC6~L z7Hyz{$FFaH{Z~c<;mU=SmtDb5-Cf=l*ocso>K7bUDQzCI`5EW3BBlze*kBtVgId24 z>d;@SK`-$z83;N0uzYqI5MRIXZi;I;&WFIWm zQl>UrHGkgZW66+Q|Gn>hbt{_&M2EwB=m*_U;1|VHj-{Jbqsm1D*5XJxH4-;KXmx$P zPYQ#@-r*da`*D0c<+0rC@yBg8XIQVJvoP6HohkM?AU3FOR&M!6JpYh)HvAvV-Mtnx zDDn$=Xp93WM1$uYII=Rh@s|m~xdy-)hJi9AIGfV@Jks$OL@5VmxU+u0&;C#Yz^a7c z7qSL%g{3&~Usy5+k+!i@uiheYL7@$F%eyd8T_?gx_=dvBfV~AK!O%!x7KjHd-ooYn zG>~j{dD@-|0NJ4A{tfl_yjwPG+VJneY;exNjr{rlU;pE}#>dy#IEgK>1nUC;r6+2S KD;~al^WOlS7EAR2 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/formula4.png b/doc/salome/gui/SMESH/images/formula4.png new file mode 100644 index 0000000000000000000000000000000000000000..170f25558f668a433b61840bc4561b20b1c9433c GIT binary patch literal 5266 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/free_borders1.png b/doc/salome/gui/SMESH/images/free_borders1.png new file mode 100755 index 0000000000000000000000000000000000000000..6e73c93291d6775cc2cb50940c55311723a46230 GIT binary patch literal 5648 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 delta 12 UcmZ2pyR3G@XTHr}_%`bU04=8mkN^Mx diff --git a/doc/salome/gui/SMESH/image101.gif b/doc/salome/gui/SMESH/images/image101.gif similarity index 100% rename from doc/salome/gui/SMESH/image101.gif rename to doc/salome/gui/SMESH/images/image101.gif diff --git a/doc/salome/gui/SMESH/image105.gif b/doc/salome/gui/SMESH/images/image105.gif similarity index 100% rename from doc/salome/gui/SMESH/image105.gif rename to doc/salome/gui/SMESH/images/image105.gif diff --git a/doc/salome/gui/SMESH/image106.gif b/doc/salome/gui/SMESH/images/image106.gif similarity index 100% rename from doc/salome/gui/SMESH/image106.gif rename to doc/salome/gui/SMESH/images/image106.gif diff --git a/doc/salome/gui/SMESH/image120.gif b/doc/salome/gui/SMESH/images/image120.gif similarity index 100% rename from doc/salome/gui/SMESH/image120.gif rename to doc/salome/gui/SMESH/images/image120.gif diff --git a/doc/salome/gui/SMESH/image121.gif b/doc/salome/gui/SMESH/images/image121.gif similarity index 100% rename from doc/salome/gui/SMESH/image121.gif rename to doc/salome/gui/SMESH/images/image121.gif diff --git a/doc/salome/gui/SMESH/image122.gif b/doc/salome/gui/SMESH/images/image122.gif similarity index 100% rename from doc/salome/gui/SMESH/image122.gif rename to doc/salome/gui/SMESH/images/image122.gif diff --git a/doc/salome/gui/SMESH/image123.gif b/doc/salome/gui/SMESH/images/image123.gif similarity index 100% rename from doc/salome/gui/SMESH/image123.gif rename to doc/salome/gui/SMESH/images/image123.gif diff --git a/doc/salome/gui/SMESH/image124.gif b/doc/salome/gui/SMESH/images/image124.gif similarity index 100% rename from doc/salome/gui/SMESH/image124.gif rename to doc/salome/gui/SMESH/images/image124.gif diff --git a/doc/salome/gui/SMESH/image125.gif b/doc/salome/gui/SMESH/images/image125.gif similarity index 100% rename from doc/salome/gui/SMESH/image125.gif rename to doc/salome/gui/SMESH/images/image125.gif diff --git a/doc/salome/gui/SMESH/image126.gif b/doc/salome/gui/SMESH/images/image126.gif similarity index 100% rename from doc/salome/gui/SMESH/image126.gif rename to doc/salome/gui/SMESH/images/image126.gif diff --git a/doc/salome/gui/SMESH/image127.gif b/doc/salome/gui/SMESH/images/image127.gif similarity index 100% rename from doc/salome/gui/SMESH/image127.gif rename to doc/salome/gui/SMESH/images/image127.gif diff --git a/doc/salome/gui/SMESH/image130.gif b/doc/salome/gui/SMESH/images/image130.gif similarity index 100% rename from doc/salome/gui/SMESH/image130.gif rename to doc/salome/gui/SMESH/images/image130.gif diff --git a/doc/salome/gui/SMESH/image131.gif b/doc/salome/gui/SMESH/images/image131.gif similarity index 98% rename from doc/salome/gui/SMESH/image131.gif rename to doc/salome/gui/SMESH/images/image131.gif index dc6433146575445d3777b8a69c1077d533ed35b4..8ca3453fdac083655fb3c9950eee1cad985b5c0d 100755 GIT binary patch delta 14 WcmX>uazbRoL}o_b%@diou>k-n)CCOy delta 12 UcmX>ha$ID?MCQ$tn76S303(eB00000 diff --git a/doc/salome/gui/SMESH/image132.gif b/doc/salome/gui/SMESH/images/image132.gif similarity index 100% rename from doc/salome/gui/SMESH/image132.gif rename to doc/salome/gui/SMESH/images/image132.gif diff --git a/doc/salome/gui/SMESH/image133.gif b/doc/salome/gui/SMESH/images/image133.gif similarity index 100% rename from doc/salome/gui/SMESH/image133.gif rename to doc/salome/gui/SMESH/images/image133.gif diff --git a/doc/salome/gui/SMESH/image134.gif b/doc/salome/gui/SMESH/images/image134.gif similarity index 100% rename from doc/salome/gui/SMESH/image134.gif rename to doc/salome/gui/SMESH/images/image134.gif diff --git a/doc/salome/gui/SMESH/image135.gif b/doc/salome/gui/SMESH/images/image135.gif similarity index 100% rename from doc/salome/gui/SMESH/image135.gif rename to doc/salome/gui/SMESH/images/image135.gif diff --git a/doc/salome/gui/SMESH/image136.gif b/doc/salome/gui/SMESH/images/image136.gif similarity index 100% rename from doc/salome/gui/SMESH/image136.gif rename to doc/salome/gui/SMESH/images/image136.gif diff --git a/doc/salome/gui/SMESH/image137.gif b/doc/salome/gui/SMESH/images/image137.gif similarity index 100% rename from doc/salome/gui/SMESH/image137.gif rename to doc/salome/gui/SMESH/images/image137.gif diff --git a/doc/salome/gui/SMESH/images/image138.gif b/doc/salome/gui/SMESH/images/image138.gif new file mode 100644 index 0000000000000000000000000000000000000000..1659aab9f026f827ec29a201624e95fecea52ad9 GIT binary patch literal 4819 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/image143.gif b/doc/salome/gui/SMESH/images/image143.gif similarity index 100% rename from doc/salome/gui/SMESH/image143.gif rename to doc/salome/gui/SMESH/images/image143.gif diff --git a/doc/salome/gui/SMESH/image144.gif b/doc/salome/gui/SMESH/images/image144.gif old mode 100755 new mode 100644 similarity index 100% rename from doc/salome/gui/SMESH/image144.gif rename to doc/salome/gui/SMESH/images/image144.gif diff --git a/doc/salome/gui/SMESH/image145.gif b/doc/salome/gui/SMESH/images/image145.gif similarity index 100% rename from doc/salome/gui/SMESH/image145.gif rename to doc/salome/gui/SMESH/images/image145.gif diff --git a/doc/salome/gui/SMESH/image146.gif b/doc/salome/gui/SMESH/images/image146.gif similarity index 100% rename from doc/salome/gui/SMESH/image146.gif rename to doc/salome/gui/SMESH/images/image146.gif diff --git a/doc/salome/gui/SMESH/image147.gif b/doc/salome/gui/SMESH/images/image147.gif similarity index 100% rename from doc/salome/gui/SMESH/image147.gif rename to doc/salome/gui/SMESH/images/image147.gif diff --git a/doc/salome/gui/SMESH/image148.gif b/doc/salome/gui/SMESH/images/image148.gif similarity index 100% rename from doc/salome/gui/SMESH/image148.gif rename to doc/salome/gui/SMESH/images/image148.gif diff --git a/doc/salome/gui/SMESH/image15.jpg b/doc/salome/gui/SMESH/images/image15.jpg similarity index 100% rename from doc/salome/gui/SMESH/image15.jpg rename to doc/salome/gui/SMESH/images/image15.jpg diff --git a/doc/salome/gui/SMESH/image151.gif b/doc/salome/gui/SMESH/images/image151.gif similarity index 100% rename from doc/salome/gui/SMESH/image151.gif rename to doc/salome/gui/SMESH/images/image151.gif diff --git a/doc/salome/gui/SMESH/image152.gif b/doc/salome/gui/SMESH/images/image152.gif similarity index 100% rename from doc/salome/gui/SMESH/image152.gif rename to doc/salome/gui/SMESH/images/image152.gif diff --git a/doc/salome/gui/SMESH/whd_toc4.gif b/doc/salome/gui/SMESH/images/image154.gif old mode 100755 new mode 100644 similarity index 63% rename from doc/salome/gui/SMESH/whd_toc4.gif rename to doc/salome/gui/SMESH/images/image154.gif index 354aa6ece3d858dddee0810e042bebb83e857b0a..2d527fbbb52b74e3dbf66501032340bc89a6abd2 GIT binary patch literal 1001 zcmZ?wbh9u|lw^=*_|5|Ns9F);&s$hQJUG0UeOrL3x3J;~axJhm6OD1qYisgtcN$ zY*=`>otx3aL_^TQnSoJ9jK#nq`ADaQzpxU3nnGN$^U4#Sr$zZD6U&sq`^*81(SmgbPVqj2B>M+>X4$C-!?50CM( zIQYd(EPQ&h*^p_2PJ(gT!Regs|9p0B$vngpv^wtWuCK3HHzc2)=Nnz-z+epkVhVN* literal 952 zcmZ?wbhEHb6krfw_|Cxa9|RbH@C*>l1R^jjNr4Mc#bG=`Z##K4d?lL5$1V*qMm z0P}&YQ7{?;LplT$f3h$#FfcLbfP4YU6Yd<-7+5)EJT@#iz|5@VQZYdRD8a|bv%nyr z(WQ+;DCLYt;e!TFE@6k77X?ZO8M#FSIu0CYJjBQ%=+&cO^oW6hn}@@PL-EOpiE7+_ zOB}Xn1U57CJc(fte#zL$Am!4aQ0f%SsF82x@IfFcXc?2JjfX{pcEfa6R=o+UF047k fA!N-p;ls7Hhjyr|dn8ybc;CR}$R#Erz+epkogY!5 diff --git a/doc/salome/gui/SMESH/images/image155.gif b/doc/salome/gui/SMESH/images/image155.gif new file mode 100644 index 0000000000000000000000000000000000000000..fe03093b8528b3e246046dc932aae1c5bedb9efe GIT binary patch literal 8217 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 JDhfdGe*kj_G8X^< literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/image156.gif b/doc/salome/gui/SMESH/images/image156.gif new file mode 100644 index 0000000000000000000000000000000000000000..36b37c8d113213e9f5b602be7d9b304bd25a29da GIT binary patch literal 4956 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 COP=-s literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/image157.gif b/doc/salome/gui/SMESH/images/image157.gif similarity index 100% rename from doc/salome/gui/SMESH/image157.gif rename to doc/salome/gui/SMESH/images/image157.gif diff --git a/doc/salome/gui/SMESH/image160.gif b/doc/salome/gui/SMESH/images/image160.gif similarity index 100% rename from doc/salome/gui/SMESH/image160.gif rename to doc/salome/gui/SMESH/images/image160.gif diff --git a/doc/salome/gui/SMESH/image161.gif b/doc/salome/gui/SMESH/images/image161.gif similarity index 100% rename from doc/salome/gui/SMESH/image161.gif rename to doc/salome/gui/SMESH/images/image161.gif diff --git a/doc/salome/gui/SMESH/image22.jpg b/doc/salome/gui/SMESH/images/image22.jpg similarity index 100% rename from doc/salome/gui/SMESH/image22.jpg rename to doc/salome/gui/SMESH/images/image22.jpg diff --git a/doc/salome/gui/SMESH/image23.jpg b/doc/salome/gui/SMESH/images/image23.jpg similarity index 100% rename from doc/salome/gui/SMESH/image23.jpg rename to doc/salome/gui/SMESH/images/image23.jpg diff --git a/doc/salome/gui/SMESH/image24.gif b/doc/salome/gui/SMESH/images/image24.gif similarity index 100% rename from doc/salome/gui/SMESH/image24.gif rename to doc/salome/gui/SMESH/images/image24.gif diff --git a/doc/salome/gui/SMESH/image25.gif b/doc/salome/gui/SMESH/images/image25.gif similarity index 100% rename from doc/salome/gui/SMESH/image25.gif rename to doc/salome/gui/SMESH/images/image25.gif diff --git a/doc/salome/gui/SMESH/image25.jpg b/doc/salome/gui/SMESH/images/image25.jpg similarity index 100% rename from doc/salome/gui/SMESH/image25.jpg rename to doc/salome/gui/SMESH/images/image25.jpg diff --git a/doc/salome/gui/SMESH/image27.jpg b/doc/salome/gui/SMESH/images/image27.jpg similarity index 100% rename from doc/salome/gui/SMESH/image27.jpg rename to doc/salome/gui/SMESH/images/image27.jpg diff --git a/doc/salome/gui/SMESH/image28.gif b/doc/salome/gui/SMESH/images/image28.gif similarity index 100% rename from doc/salome/gui/SMESH/image28.gif rename to doc/salome/gui/SMESH/images/image28.gif diff --git a/doc/salome/gui/SMESH/image30.jpg b/doc/salome/gui/SMESH/images/image30.jpg similarity index 100% rename from doc/salome/gui/SMESH/image30.jpg rename to doc/salome/gui/SMESH/images/image30.jpg diff --git a/doc/salome/gui/SMESH/image31.jpg b/doc/salome/gui/SMESH/images/image31.jpg similarity index 100% rename from doc/salome/gui/SMESH/image31.jpg rename to doc/salome/gui/SMESH/images/image31.jpg diff --git a/doc/salome/gui/SMESH/image32.gif b/doc/salome/gui/SMESH/images/image32.gif similarity index 100% rename from doc/salome/gui/SMESH/image32.gif rename to doc/salome/gui/SMESH/images/image32.gif diff --git a/doc/salome/gui/SMESH/image32.jpg b/doc/salome/gui/SMESH/images/image32.jpg similarity index 100% rename from doc/salome/gui/SMESH/image32.jpg rename to doc/salome/gui/SMESH/images/image32.jpg diff --git a/doc/salome/gui/SMESH/image33.gif b/doc/salome/gui/SMESH/images/image33.gif similarity index 100% rename from doc/salome/gui/SMESH/image33.gif rename to doc/salome/gui/SMESH/images/image33.gif diff --git a/doc/salome/gui/SMESH/image34.gif b/doc/salome/gui/SMESH/images/image34.gif similarity index 100% rename from doc/salome/gui/SMESH/image34.gif rename to doc/salome/gui/SMESH/images/image34.gif diff --git a/doc/salome/gui/SMESH/image35.gif b/doc/salome/gui/SMESH/images/image35.gif similarity index 100% rename from doc/salome/gui/SMESH/image35.gif rename to doc/salome/gui/SMESH/images/image35.gif diff --git a/doc/salome/gui/SMESH/image36.gif b/doc/salome/gui/SMESH/images/image36.gif similarity index 100% rename from doc/salome/gui/SMESH/image36.gif rename to doc/salome/gui/SMESH/images/image36.gif diff --git a/doc/salome/gui/SMESH/image36.jpg b/doc/salome/gui/SMESH/images/image36.jpg similarity index 100% rename from doc/salome/gui/SMESH/image36.jpg rename to doc/salome/gui/SMESH/images/image36.jpg diff --git a/doc/salome/gui/SMESH/image37.gif b/doc/salome/gui/SMESH/images/image37.gif old mode 100755 new mode 100644 similarity index 91% rename from doc/salome/gui/SMESH/image37.gif rename to doc/salome/gui/SMESH/images/image37.gif index 43592da643f1dcc10d026e35f1bdf971eec1f97c..edd5263d85a207447082330eed7c63e2e33d233d GIT binary patch delta 13 UcmaFC{*rw|E;A$V<@i~s-t delta 11 ScmaFK{(^l&F7xC(=4t>QI0SzH diff --git a/doc/salome/gui/SMESH/image37.jpg b/doc/salome/gui/SMESH/images/image37.jpg similarity index 100% rename from doc/salome/gui/SMESH/image37.jpg rename to doc/salome/gui/SMESH/images/image37.jpg diff --git a/doc/salome/gui/SMESH/image38.gif b/doc/salome/gui/SMESH/images/image38.gif similarity index 100% rename from doc/salome/gui/SMESH/image38.gif rename to doc/salome/gui/SMESH/images/image38.gif diff --git a/doc/salome/gui/SMESH/image38.jpg b/doc/salome/gui/SMESH/images/image38.jpg similarity index 100% rename from doc/salome/gui/SMESH/image38.jpg rename to doc/salome/gui/SMESH/images/image38.jpg diff --git a/doc/salome/gui/SMESH/image39.gif b/doc/salome/gui/SMESH/images/image39.gif similarity index 100% rename from doc/salome/gui/SMESH/image39.gif rename to doc/salome/gui/SMESH/images/image39.gif diff --git a/doc/salome/gui/SMESH/image40.gif b/doc/salome/gui/SMESH/images/image40.gif similarity index 100% rename from doc/salome/gui/SMESH/image40.gif rename to doc/salome/gui/SMESH/images/image40.gif diff --git a/doc/salome/gui/SMESH/image41.gif b/doc/salome/gui/SMESH/images/image41.gif similarity index 100% rename from doc/salome/gui/SMESH/image41.gif rename to doc/salome/gui/SMESH/images/image41.gif diff --git a/doc/salome/gui/SMESH/image46.gif b/doc/salome/gui/SMESH/images/image46.gif similarity index 100% rename from doc/salome/gui/SMESH/image46.gif rename to doc/salome/gui/SMESH/images/image46.gif diff --git a/doc/salome/gui/SMESH/image49.gif b/doc/salome/gui/SMESH/images/image49.gif similarity index 100% rename from doc/salome/gui/SMESH/image49.gif rename to doc/salome/gui/SMESH/images/image49.gif diff --git a/doc/salome/gui/SMESH/image5.jpg b/doc/salome/gui/SMESH/images/image5.jpg similarity index 100% rename from doc/salome/gui/SMESH/image5.jpg rename to doc/salome/gui/SMESH/images/image5.jpg diff --git a/doc/salome/gui/SMESH/image50.gif b/doc/salome/gui/SMESH/images/image50.gif similarity index 100% rename from doc/salome/gui/SMESH/image50.gif rename to doc/salome/gui/SMESH/images/image50.gif diff --git a/doc/salome/gui/SMESH/image51.jpg b/doc/salome/gui/SMESH/images/image51.jpg similarity index 100% rename from doc/salome/gui/SMESH/image51.jpg rename to doc/salome/gui/SMESH/images/image51.jpg diff --git a/doc/salome/gui/SMESH/image52.jpg b/doc/salome/gui/SMESH/images/image52.jpg similarity index 100% rename from doc/salome/gui/SMESH/image52.jpg rename to doc/salome/gui/SMESH/images/image52.jpg diff --git a/doc/salome/gui/SMESH/image53.gif b/doc/salome/gui/SMESH/images/image53.gif similarity index 100% rename from doc/salome/gui/SMESH/image53.gif rename to doc/salome/gui/SMESH/images/image53.gif diff --git a/doc/salome/gui/SMESH/image55.gif b/doc/salome/gui/SMESH/images/image55.gif similarity index 100% rename from doc/salome/gui/SMESH/image55.gif rename to doc/salome/gui/SMESH/images/image55.gif diff --git a/doc/salome/gui/SMESH/image56.gif b/doc/salome/gui/SMESH/images/image56.gif similarity index 100% rename from doc/salome/gui/SMESH/image56.gif rename to doc/salome/gui/SMESH/images/image56.gif diff --git a/doc/salome/gui/SMESH/image56.jpg b/doc/salome/gui/SMESH/images/image56.jpg similarity index 100% rename from doc/salome/gui/SMESH/image56.jpg rename to doc/salome/gui/SMESH/images/image56.jpg diff --git a/doc/salome/gui/SMESH/image58.gif b/doc/salome/gui/SMESH/images/image58.gif similarity index 100% rename from doc/salome/gui/SMESH/image58.gif rename to doc/salome/gui/SMESH/images/image58.gif diff --git a/doc/salome/gui/SMESH/image63.gif b/doc/salome/gui/SMESH/images/image63.gif similarity index 100% rename from doc/salome/gui/SMESH/image63.gif rename to doc/salome/gui/SMESH/images/image63.gif diff --git a/doc/salome/gui/SMESH/image64.gif b/doc/salome/gui/SMESH/images/image64.gif similarity index 100% rename from doc/salome/gui/SMESH/image64.gif rename to doc/salome/gui/SMESH/images/image64.gif diff --git a/doc/salome/gui/SMESH/image67.gif b/doc/salome/gui/SMESH/images/image67.gif similarity index 100% rename from doc/salome/gui/SMESH/image67.gif rename to doc/salome/gui/SMESH/images/image67.gif diff --git a/doc/salome/gui/SMESH/image7.jpg b/doc/salome/gui/SMESH/images/image7.jpg old mode 100755 new mode 100644 similarity index 99% rename from doc/salome/gui/SMESH/image7.jpg rename to doc/salome/gui/SMESH/images/image7.jpg index ded3ae99a35200597497fb8f0a1ad3803ce276c0..cbd6170ee9f9fdd1078ce15363a6eee1ed9dc86d GIT binary patch delta 16 XcmaFe!SbeqWrL<0BkyKSH>Z67I)w&5 delta 14 VcmaFU!ScF;WrL>MW-T|TeE>2U1~LEu diff --git a/doc/salome/gui/SMESH/image70.gif b/doc/salome/gui/SMESH/images/image70.gif similarity index 100% rename from doc/salome/gui/SMESH/image70.gif rename to doc/salome/gui/SMESH/images/image70.gif diff --git a/doc/salome/gui/SMESH/image70.jpg b/doc/salome/gui/SMESH/images/image70.jpg similarity index 100% rename from doc/salome/gui/SMESH/image70.jpg rename to doc/salome/gui/SMESH/images/image70.jpg diff --git a/doc/salome/gui/SMESH/image71.gif b/doc/salome/gui/SMESH/images/image71.gif similarity index 100% rename from doc/salome/gui/SMESH/image71.gif rename to doc/salome/gui/SMESH/images/image71.gif diff --git a/doc/salome/gui/SMESH/image71.jpg b/doc/salome/gui/SMESH/images/image71.jpg similarity index 99% rename from doc/salome/gui/SMESH/image71.jpg rename to doc/salome/gui/SMESH/images/image71.jpg index bdb07ea6bab04466f5aa3a92191cff1485b68014..cb1223d3895bfeb700592dfd27b64d20f6ef772b 100755 GIT binary patch delta 14 VcmbOmH7{yIk`yEF<|L`zLI5hz1ttIh delta 12 TcmbOiH8*NQlGNs8sog>VBuNDs diff --git a/doc/salome/gui/SMESH/image74.gif b/doc/salome/gui/SMESH/images/image74.gif similarity index 90% rename from doc/salome/gui/SMESH/image74.gif rename to doc/salome/gui/SMESH/images/image74.gif index db8a4c8cd10fe3f3e33103f3bddfb74954d58a32..c66029e7484cd22dcbdfddd29e9592812a56b299 100755 GIT binary patch delta 13 Ucmcb`ew%%RGBYFZWM$^<03bL77ytkO delta 11 Scmcc3ev5sBGV^2==IsC)!UPKd diff --git a/doc/salome/gui/SMESH/image76.jpg b/doc/salome/gui/SMESH/images/image76.jpg similarity index 100% rename from doc/salome/gui/SMESH/image76.jpg rename to doc/salome/gui/SMESH/images/image76.jpg diff --git a/doc/salome/gui/SMESH/image77.jpg b/doc/salome/gui/SMESH/images/image77.jpg similarity index 100% rename from doc/salome/gui/SMESH/image77.jpg rename to doc/salome/gui/SMESH/images/image77.jpg diff --git a/doc/salome/gui/SMESH/image78.jpg b/doc/salome/gui/SMESH/images/image78.jpg similarity index 100% rename from doc/salome/gui/SMESH/image78.jpg rename to doc/salome/gui/SMESH/images/image78.jpg diff --git a/doc/salome/gui/SMESH/image79.gif b/doc/salome/gui/SMESH/images/image79.gif similarity index 100% rename from doc/salome/gui/SMESH/image79.gif rename to doc/salome/gui/SMESH/images/image79.gif diff --git a/doc/salome/gui/SMESH/image79.jpg b/doc/salome/gui/SMESH/images/image79.jpg similarity index 100% rename from doc/salome/gui/SMESH/image79.jpg rename to doc/salome/gui/SMESH/images/image79.jpg diff --git a/doc/salome/gui/SMESH/image80.gif b/doc/salome/gui/SMESH/images/image80.gif similarity index 100% rename from doc/salome/gui/SMESH/image80.gif rename to doc/salome/gui/SMESH/images/image80.gif diff --git a/doc/salome/gui/SMESH/image82.gif b/doc/salome/gui/SMESH/images/image82.gif similarity index 100% rename from doc/salome/gui/SMESH/image82.gif rename to doc/salome/gui/SMESH/images/image82.gif diff --git a/doc/salome/gui/SMESH/image83.gif b/doc/salome/gui/SMESH/images/image83.gif similarity index 100% rename from doc/salome/gui/SMESH/image83.gif rename to doc/salome/gui/SMESH/images/image83.gif diff --git a/doc/salome/gui/SMESH/image84.gif b/doc/salome/gui/SMESH/images/image84.gif similarity index 100% rename from doc/salome/gui/SMESH/image84.gif rename to doc/salome/gui/SMESH/images/image84.gif diff --git a/doc/salome/gui/SMESH/image86.jpg b/doc/salome/gui/SMESH/images/image86.jpg old mode 100755 new mode 100644 similarity index 100% rename from doc/salome/gui/SMESH/image86.jpg rename to doc/salome/gui/SMESH/images/image86.jpg diff --git a/doc/salome/gui/SMESH/image88.gif b/doc/salome/gui/SMESH/images/image88.gif similarity index 100% rename from doc/salome/gui/SMESH/image88.gif rename to doc/salome/gui/SMESH/images/image88.gif diff --git a/doc/salome/gui/SMESH/image88.jpg b/doc/salome/gui/SMESH/images/image88.jpg similarity index 100% rename from doc/salome/gui/SMESH/image88.jpg rename to doc/salome/gui/SMESH/images/image88.jpg diff --git a/doc/salome/gui/SMESH/image90.jpg b/doc/salome/gui/SMESH/images/image90.jpg similarity index 100% rename from doc/salome/gui/SMESH/image90.jpg rename to doc/salome/gui/SMESH/images/image90.jpg diff --git a/doc/salome/gui/SMESH/image91.gif b/doc/salome/gui/SMESH/images/image91.gif similarity index 100% rename from doc/salome/gui/SMESH/image91.gif rename to doc/salome/gui/SMESH/images/image91.gif diff --git a/doc/salome/gui/SMESH/image92.gif b/doc/salome/gui/SMESH/images/image92.gif similarity index 100% rename from doc/salome/gui/SMESH/image92.gif rename to doc/salome/gui/SMESH/images/image92.gif diff --git a/doc/salome/gui/SMESH/image92.jpg b/doc/salome/gui/SMESH/images/image92.jpg similarity index 100% rename from doc/salome/gui/SMESH/image92.jpg rename to doc/salome/gui/SMESH/images/image92.jpg diff --git a/doc/salome/gui/SMESH/image93.jpg b/doc/salome/gui/SMESH/images/image93.jpg similarity index 100% rename from doc/salome/gui/SMESH/image93.jpg rename to doc/salome/gui/SMESH/images/image93.jpg diff --git a/doc/salome/gui/SMESH/image94.gif b/doc/salome/gui/SMESH/images/image94.gif similarity index 100% rename from doc/salome/gui/SMESH/image94.gif rename to doc/salome/gui/SMESH/images/image94.gif diff --git a/doc/salome/gui/SMESH/image94.jpg b/doc/salome/gui/SMESH/images/image94.jpg old mode 100755 new mode 100644 similarity index 100% rename from doc/salome/gui/SMESH/image94.jpg rename to doc/salome/gui/SMESH/images/image94.jpg diff --git a/doc/salome/gui/SMESH/image95.gif b/doc/salome/gui/SMESH/images/image95.gif similarity index 100% rename from doc/salome/gui/SMESH/image95.gif rename to doc/salome/gui/SMESH/images/image95.gif diff --git a/doc/salome/gui/SMESH/image95.jpg b/doc/salome/gui/SMESH/images/image95.jpg similarity index 100% rename from doc/salome/gui/SMESH/image95.jpg rename to doc/salome/gui/SMESH/images/image95.jpg diff --git a/doc/salome/gui/SMESH/image96.gif b/doc/salome/gui/SMESH/images/image96.gif similarity index 100% rename from doc/salome/gui/SMESH/image96.gif rename to doc/salome/gui/SMESH/images/image96.gif diff --git a/doc/salome/gui/SMESH/image96.jpg b/doc/salome/gui/SMESH/images/image96.jpg similarity index 100% rename from doc/salome/gui/SMESH/image96.jpg rename to doc/salome/gui/SMESH/images/image96.jpg diff --git a/doc/salome/gui/SMESH/image97.gif b/doc/salome/gui/SMESH/images/image97.gif similarity index 100% rename from doc/salome/gui/SMESH/image97.gif rename to doc/salome/gui/SMESH/images/image97.gif diff --git a/doc/salome/gui/SMESH/image97.jpg b/doc/salome/gui/SMESH/images/image97.jpg similarity index 100% rename from doc/salome/gui/SMESH/image97.jpg rename to doc/salome/gui/SMESH/images/image97.jpg diff --git a/doc/salome/gui/SMESH/image98.gif b/doc/salome/gui/SMESH/images/image98.gif similarity index 100% rename from doc/salome/gui/SMESH/image98.gif rename to doc/salome/gui/SMESH/images/image98.gif diff --git a/doc/salome/gui/SMESH/image99.gif b/doc/salome/gui/SMESH/images/image99.gif similarity index 100% rename from doc/salome/gui/SMESH/image99.gif rename to doc/salome/gui/SMESH/images/image99.gif diff --git a/doc/salome/gui/SMESH/images/intersect_groups1.png b/doc/salome/gui/SMESH/images/intersect_groups1.png new file mode 100755 index 0000000000000000000000000000000000000000..9251b0e7a68e64b8fe3e788be6574dfe9a4ccd24 GIT binary patch literal 30782 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%0DmeNi0bW`HFWESRe zX*Nr#IdMCo5avwqqRoW!Zkn;fD0yya<*NsXoKV%|I^6+H%{wW6S+_$9HBq$i{KzG`3W3gKR$0g8)-Z2$k30EM2*w;;9z4t69;&gxeUbRa&-wY@liUCQe~zM6UU*Kn W&xtEk0pA5Cc&@Ia276-p@&5wsC=nk3 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/intersect_groups2.png b/doc/salome/gui/SMESH/images/intersect_groups2.png new file mode 100755 index 0000000000000000000000000000000000000000..eeaed8da1c21ab4dd0db2efd961a14a3bc82a168 GIT binary patch literal 34579 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 BC~N=# literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/intersect_groups3.png b/doc/salome/gui/SMESH/images/intersect_groups3.png new file mode 100755 index 0000000000000000000000000000000000000000..74f5c2d768472ba15a8e7111c172672b3758fd7b GIT binary patch literal 31212 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 Ma9zJr_tw4t0`7E2DgXcg literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/length2d.png b/doc/salome/gui/SMESH/images/length2d.png new file mode 100755 index 0000000000000000000000000000000000000000..9a5264a020e2167b0b5e072cec8fda4135d76235 GIT binary patch literal 43379 zcmb?@Wl)=6^k&fFPAOj8-7UBl*Fq^$Tv}X1uofs32wvRXok9uj?pCB&afcv5HoyPw ze%p_mnasTN&g9PVbMJYcn@DXWW<{{|6b|=fVTiu z1zCOH%wuSfGxee$^J6BO4Gtz#E-G0r4%siF%&w%wFeYO~)?y`<<{x(>zt44Pkm7f^ z>G_S5^sO4BAM%nb6`A1hsS%Sdv&+CG?jm}p6*SSAs%bT&AKWTD?Mwy=@dkn%{3^)t zcNE%kM5dT(u3~Yh?HjavV`FIodt(p~kD^-Us{voZfU{PQy$SF?zo5)pfSCKvP&|Wj zEY<(the0c3`osNwU%|8a>1kPo=_g+jbFTHfJ<29{Q&CZoRgm{sJ!fF1=&9aG;K{%7 z3}RYMPv~5eZb|lkvM^V=QJg$D8a0`41w!qc-iPgB2{Z_lOlJNI!kTDD%bN7Ud+OG{ z*_)3qVBqk6_)qk_UW$_GtHeFX(=gvlPS&K)f}>DHf9UBL_9Ut3p72ej$A5ahR+xMC z1YO^4x=?q(mYY_dOqxuj%z+#C0W8uJ2Q_;>{?%abnA6$um$QF$EwOn_zLtwdziok8 zW%G{np!til7@xqh#M#}Z$?E$rcTH#J+uI1e%;0u>6J^p8Opso;!z{gz=9s2lP6fL; zwJ;>!>sRsuITM0`#{Xkyu10G?aba-*iP@`pn$dc3aq;lLpwfq{!`PqRT?Nx=%W2d+ zC$%P()j!)1f{gn#f;txTstoaiu3SMN5PbGzFqY;wpO1Wn%>6S$1}|{YsAFAQ$Bfr@ zj!Seld5rX*-VMost3eT~iS~2nJnznbgIfP7Zq-l7R4~Eg#m&Xl^HJh_0O>w#a9#Yhd_kUD2T^o^;-XPo`Me{-4C;1x04^nP z)_)%22xTRwz8gTA$@8v3&%t7>ahs7aj^gU1KM0Dlq_})b8#H{M2 z={Z&4m9}rQ%q^Qy0m5JQ+|LG&IcpKskCVTBPAAN=YzP~{9bCNrr5&q|bxCfb!p0d} z>mNik=gRMHw!$vM7H>Pvo_|rj7)QM{i^9JeFV1JG{ui{B82RZF^_7kW3Uc7+*qH3+ zt65&_r6*a0`9AO8M(jvu`S0mxQfP>i1Dm>2ZaG@8;)|h~Q@7}%J z8{K<4*85Lc$?7*RHQOcYVobE;4^Me%%k6Oj|E2Cs-nnzgb6@XX)E^q3QcsyPndp@kCOYN5=GtA=*ILOeozqCJ|A)@D9O$pYrGWBh) zZEW1X|1t!M>|&yIgAFUti5)F+)5FvsKyK1B9lG z8SYm3fgiXQX{9BAH@AAv(p;nI51xmQJNLHP2tBcoVRKALqA`XTf+Xh-u`Co7B$S`K z$F6Zqrl2JfG52G~I5he2-C8$n$9WU;y0Z~!(+db`P>Jue%cRSCyVw~=dci%xxBY$@ z4ZlLw9wk5*M{fu?+jC^vl*)G-VE$NrZc1nCKoE<_J9UNr8Zzv#(ACyfZB~N#`g~RR zfHyt6q|y73hKah^Jk}}SkOOSp-6pXGe0#L#M9a^ODS;jOzs;{GmldI2v?nJg2yc6u zd-i@XF%h@;AqptbVKNz6e8naC!T!N!xK5Ms)1+seW|&g{Tfa$#k)e7NVa zR&0~>+WLj(;1F%>6!`F-y6LObD|6WCQV!J-!YfcHcxPYbBrt|Y#KqXK$}n;9J^Iwm zd^MsHC$|ZTEs*lFX_MY}gT#@fMboi%65mU=jlJ?1>9;uI6(Afm;!_a7$3+^yxoSo$G`aqM6Be0AfJHXMZS9CLkw{EUFV?iv&U zhQGti!>c|3EG}UA0nwe_@8BuFJKKN%`n3ct0bM^$mv!c}fo{Jbs-iM_?CR6a$DJXa zSN0fjSdxbHEfZ=;Av2o+#k0iN$fZTYA81o-rok&0MN{IQ5*>|SPb4&SvC~fc|R4euDQQXeh!%e+?Yiz?Rv zAo|!lY4f(b7P24aJg+;=GE*~4*DAaMRe3G;uCgxcb0r`AIs!Ug=AX9~e;}%Y(U}1$ zAGU>~zvDG@nzVx#k(YB>-?btYD3T}X28qLy4GZEPBIg{N5T>{kBazu`4Xtl;M^q$4 z+8sh2s|{Jy=XRiYRPe)lEjshA8AQ9OG(xJsG%nLfxkG@1 zosJyGSpWxHKF z}!hga>1)5`&a{6R&=bcFpt+T zz>+LLey(I+JLtpAG{>IdJik`l6(#=F@<9EB^$rWSR;B zSlJbe^fBClrmPWVBye)REKucj5K34K%EUMp9Wh#475>1vyKFF^khYk#_=9JM19Lsk zb7%hehj*+j=*=>H3Lo)_$Ig2lR`3Dc57E&-O0@sF;|1vaad{OegjO7j7r*=4*iljV zg>ez*Dp~!ogk3iu3o~!-rkmD@n@toty+NnY7*4(rV+u1sEQ87F?EW%Qgj}bcVqwdd-lL z+Cnb+$|&FD@+J}0MZ&`$1G*5TGuG+JJ}wkyr1!Zf7EFXE<7u8%az8)$bHBUMZF6LS z%_?75x>u4F@}L#<>ISmKAPX&9H`m0snOc3Ipgwdd>y^0j$b)1G9IW(q&d|nQY>An) ze{Q#_R`(F3Ruf|7=;!}IxlCVA+Z4TG-B6=OwK7n=!kvgcSDKI_kD>${ux6^uY2h~p z@lM&lJAS>nWKRL75~GOdd3$V%TM~x1=C5!zHc6%Ok@7piz6dz6v)^VPNzD2DkwX4n%g^?5*996YN>lZ zPA8#@g$c1C+$29WZJ$5$EricQD81l78~mQb%5^HrnQ$3GQ#RP41P-W)(P-j3k;6H) zU4UGxk9@f@3Nw)yrI56nX+ol&^b)K&TvyKiG!jqBt~|Gx$mZlM_)u;QXZM0XE;1+F zS;Dsj*`b-Vf8GZrj|i0)j)>kTYhgVKWnErBQOHyy5=2U&fwfZK#r$_=-SimyJmlLK zTfIO=#EaIhd%g_j`5aPrjW%zK?=kev;h5o{qY?WPhul7ycs87J#f2q%^kj<2Z^cyR z_A~l!y55v9KxV@OQ$}C1n+Nm9kA3CS%wIfqR1^f!S5SR~VkoNYHXz@SF_h(qo2oKC zCdv(-0Yno`WXv#{(!U!NXsrGlBK$g~rtl>ZL%$4q8(+*XXxaIn4KzeA*~~s}FKkWl}$4cF}flI3C4s~Qi6^dw{$ z2XXOj_dWT8y6$A3qKPjHXW3;2T{ZTmR%<2+6~D`@9Ve?h<%6p0&!f{gtbE!yz2ptG?lkt% z6frb>wkKfZ8~Qv<*uaIN?{z{7hhCp*p4H)0i5E3ib%}6mjul#5g$~*Sx;?<1|1*YM zh#KeLOtb;cj8;6$1Vg1GxVn*DRVk+&6LOXLyqYq<P4YjIDX)&ARs2m$7MLV)p z6SoRirbD$jj^Fe$`i;i@@|$reibn|2ODK!jw4qGhT016dn4)6`kN@ItN@sg#^{Iea z(SeQ#GiFRf_oN~E?2IyPu2j{EBZo8eNc)_szS}4fuUyTe^3COvz2s%1E;KjKRX)a^ zZNI*Ak3YB@E&XJ>WNdC!*)&Jy&py-P=c5mQ=N@-+&!XV^rtbB}{E;>O?0P>P@_xl}aVnCJeHl z9j#cxJWV9kq0`I|Rf+e32bxtk-BP@hwY>Ee!D&@QfJTWeJtW4F4_!UtNa^ZO2c;fn zy+s425Io#go-b7rcvxoq$SA16DfAocd}HsPslPb7{6^xO)<_>EXZikBYOI8GH{}eW zJghkfbN};m)4xQ#(3O(9=58ZRGL^-jKoxGA*_(0*e(=oQotxWO`Jxj!hc0n>T}cMG zo)AtrJzl@GkMBkSOmU@m-{aLqLF)2CG8n!#^kWlN2zYZw>oRYnOmC zR`U8G#~50+Yma*Jm}&n+pCG@XRDX*u|cZlA#|rHn?a>JZ5|kzQ+KF>=S?$T zJDUrwv?&0F)O(aAPpOkj$LSQ<8}oL35ONKLc)p38PnA9uI1FBb=YVxGQled10Tx#_ zxB14DazdB|);F;`enlA)vbpe^V)wW;HY4Hty-GIE^4(c^Bn_BEhj!y? zzk(>D`5D!-LF>g70?n}!vMsNK7RnoBj90!dikd8Z7P{5j^I2f<`&%$T!J_kzX`$VO|LI5xN7?PD(qHX9u-I)#B zVX~r8p1Po0R-k%A-Nc;zENSVR=6^n9pC^KCJ&6EgAVT>Ev=20LM{>+D%hvm%bMi%G zfG7}>Q{>3&TCp!&%w8P&hc?bncqSn>7JTDqu{G{xObg+P z;T%SH(+qs&lbkP{G;^5;`;(}gfA7qCB_7h6 zwS610&+e>RN>Sp@cs(RFipNRQgqg!`#(JOmt6cfc)EB~7rlPta&hG5Tz=CP=3*lhC z033DQIEwP1$7D5bFWqz68o+tWC?J`4vUo|F@XyMr8|zFz->iOgaXn;z>J13nHOKOa zn_zp5vN_eqzM90-Wp|Mg@00(2z5ip!iw*Q|Q$VcX`b6H>5G5;jH7fUhQ^eND3HNZa zcME$A$-@Gt#!tF=V7RetxJXkjWJ)y@CFw*mBMn6R1Fz0fh=KNZj;&dMFo=yO#~we2 z_~?@^pi7>!oyYrrp0zKo%(t+qeB&7XV6=V@nOSkYR1ir#8}tyLqZq4Q==;C-Y0Sxp+0MoL%#Iq+}LUX7sr4h7UI%~5dX2^8#I*=ZL5mV8zYo_>2U)oy-bF?c+hbx@O9ZX5iA;xKB~#fa3~l}aWxl&Gon zX3jpAg%n}KPfUC*piiOV<`qUM!c?R;O)R0wh%2{7!oQ&3^N9{F|i=*PJPN5D`I~vC(CL+;b`$KB|w6tpU@%| zHfFl<{d;D!pWkPS?0E^qFTKwHz;FI8s0gY9ANn&;F`*CRyUAl4sQIb-L}&sC9$*ia zn0(kXo(?*+M=pldzyI{jN?swSo~*Cp0R6pc=I4n*@g2c7yxdB{Gmfci3mp8nL)TWp zy6m&g4bmEJTGdiyXdnvxO>3UDPsigbobE52nGzK6sX!0?a?OZh@(pP-k;Ev%C0D|~ ze%Kd_eum#XndC>3nj)1MUf5~(HAk|)HW&mzTA76yN~T#TLS>ld^?ZDf*d_<}I;CD= zs;93M{9M+n`hc}G8=<+2i8nt$Z=~Sm_)Wcw(Ny^l6#`as3iWgW|uV*5&xN=58O@xUrYxz+HPJ{(!{Lq@}a7U1RIKe zsFPk}*>w{fW<*&QNLxR!Q@!@65h{%8pnmEnxHcPgxHK1^|LtIQYh zOBYu$78#$RoNg-bL$Ls`;uUCPBKzhMCs?DH=f{`t_K@7U^QvT)EWn$^PmT{TzJcx6 zGzOn?RZOTNdzZ^Gqtm;R%g(ly8?*v;X-lQwRg1S$L>Y31ZD-HiXWTke;s+1rp~JP) zfqrA+Febdu)>O%~vkTIG#>H{K&$4sw*`#~MoyXfO3>K4=>+!m-6Rpf>7N$SS4*noc zgK9V=0Ew1R|L)0cI9>Bw_#FElhq~A0_a7kUvsn=MSmbdopm|Z)Er{(sq%hts*JgMw zxiF9Lu@btFy?3FgNb=s@pau%C1F_C`e z983oH>%dS^T^4DB2$(*sx9t8s{At$p)c5|uf1N`q!lc{XHzpdB_+7D;t`{oIR@%Z^ zH+%5b%!>-o!kk~JP7!z2{jEy>MZz7)QMRhym{qt@Ef&u=?df`O4sHd zGmO=iN{ejBOZwinL{;rHCbQiiB+h#BYAGbabf%o+B6Hs1EUo&*g1kzp#k>sp_|>)n zh(3h<1B7k1e3~FJmi+!F{0^;s)Bk-&iV<|*VFZhOQFdE}GQ6K1_W#o2}3 zDL0>pa*d@&NlNw0o`?6hXAPHrq9)cGG1!s*u#hdGd%H$ar$yy1^x#XcotsVMfH>xy zW6^pNdJ@w92qHa?-D_6fOJ1y45!I(o*Hm=x1VX{b_kD*`4+FQiG3t)}MhWG{%w%m3 zEZYmql)Mfk$7qCf29N$1Mlb6P3niT6Gn=ZEx6#9#yCa@VGV-~-c?`=vxy*vaO7||1 z7ZNwBF8Wx%ASW3wrDwIX8zc-L8i#*(4#$a}_TX)l?^j29yk*iRsj3k_WQY>$k7^+- zybh1lTZ5`dH_xW8c;igd@w6hBS+33@bW4Y1aqQrO>F9E(y@AC)LP=yaExmRu3M7l6 zz#(26m1vmbUVP>DSx&Ne@|+(q0dG9unGaS_Q_Jwv;hNMN)y*Kk4t!Z~M$cDS{j4g| z!%~}fd%BFh^(Bw;;kP2Ed_C&>w;ZDNc)8oHF&fp-$)^XUygr%fK1%&+;0T`aH}p>N zjS7u|A$4I2IBx{=A3JL4Y2fjwh~?w#+$)#B=>wxBeqOa?o4=)O=vbp@<@(d}JMgpo zjwtA|)>-la6bmHKkw6=a24mm<30lq%B>yxnRa z>AR0ezQ=y)4@sv;AA%Y1sBQF=xrqx|KG-soP92Tkr3W~mk_E@BZp&`Fq6hPz3j;*0 zy4p(F$LH<+C3_C1wb@G1;G7oSoyOrP0)tX*&nRAs!=Sb2}}E7Vp=FB2LfpE&vAnJNX2@k`R6w$xLG znrTN+rPrpttaOj=xPuRGer*FgB2{NAbQo<5Hd4}#o3#6Z2D_uQ0NG;zF1#W z!Ftr&lCo9yUqYgx}IBQ+#w^ zfL{ZDwHG8_BPH!r&~$_S;Z=te?@Mpj-vup~i!8*<9SDE6Yj_a_?RU{t^i$jy#4j%| zOLaEcxw+}QxKS!LR45C5lud5+)Oih9vUvNhd$N?s^>UuXTV8){Zo*mSTB|j;R;vK|biulCK~ybrR}DveX}>USaf+DfWG@#c zXK)}#Fy#4P0b-h;;Twp+YLQDHKkmX#{!Djvz$bn;NT-6EUJL?1B=Mx!72B;p|7gKK zk=7q<@|`2#)0WPsZLRZV5&$$CKP8@DAXyXz1c(u(du4ltQfSoG97yUeih7-t9Q^T2 zZ@Z7Jl#+s}2iC~r#r$z5SV`pp{17-0O@1ZCjAnYe&2YRO;dJ@rww0={pAc)XRNI`O zFZKZ-er6VaIDPdrp32yT%oQSqVu-AkTF3%XHIj`vy}OK+@Ht(DW{l+l#3dwt1~pag zYLC`GyntWUgIYvXET#G`5(i5-X1^}v9vynFQiSl+4*N z5ZJVd^rHVRZOzcDnwP)g!nxbac$FHc0$WmAET@|M`^adSBCU`de#oQ|ZU{H88X1y^ zfjAKF=17}ODCfS39EJM`*XoIQa*=~j*KMs(v}`|{OnNb};m%VZ7w^=r_EmP_HMB!W z)yZ1gzwis3+I+pP$m$(}2@saUxq9E9g@CY+9@KswJc@U&w%#mPApkXOZ0wdVYf%&* zxbk>1eoQ4N<=+@W%B9jONg$s-wwnj(ZqDhYU(W28)5&V=claxo;?Jgis1t?+R^3lI z75Mp?)%7hCC%_~}ihbwp7Ov8Afjo@q1M3L!d3g_X43i3qY-D&HqBw~+>NitOiK8c7 za#ZWy#`Z17t@!+P)={?F3zaJ!%u(MqM2`X5q%gpz87>$AO9+!!^ow7g$X8WWeF*dz zy?)8ePS0MsNC4_}KHZ;iuQF@^dtx|#av-2k$*Rt~hW_1M8ybh3y6qzBmgn7tlN^Uo zKt=dprHj)-L1OVTEIZ;{?CA6<6&mwwYV%Hv8_Nf3r5htx#u-1xZs5^fIh6G+DY3i_ z^*#(dnqM2aP@?dI24FbWmMl;K~hjTPYyyqt&VL9CA)(d&7YsGlYa)_8oJ zqVe%LADt~PN_y_9tXzy!giI(-)@NfPSYI^mmvU%8P;=|Js@F$|M+x`_JyQC7sJ};{ zPOjxr3xB7>f@B~ueV)$y&8kW_f_41Zb4A%Vwz?}3x0LmJRQ?OvH{_JJW9~rNWczmT z{;z~4NPS-BAkQlvt$*6xh~D79sjE8jJlAQ>tWO)m&`Czg9fiIJx zt&?hVPyyb&M3E<#SBv;K%oYp!u`K`6W*rL*@_q=?ggpJ^YqZ#bD8T}3CYyP_cmzS+ zHKlatCCgCLp&X({1+Xj}M}2Bbs^GVJ#%xm>F7t7p%@`Zqc+C8c2u06&p1DH{m5HKp zPmG8Xp|v7NrCX=VydZkkR2RH~GM6cx#%A(lGXU%9mEY%3c5Yt#(??VuND#@1>#6oD zD;}1rvE$DNQ2t=;>d0pQjlXHXt_pv2EuadG@Tu0iAf-G9{yP9kR;#kaP|Qzs+q)hW z>^VvKe%E^5B)+HiqYoUN{Xjx-a&H2GPeCv7jq(Rhv|2WxARjlkx|$Z3YiWokSlsIt zw#L=jy8HKx+SC$H(fy{hC(mo095)Edie}@-;GJWBD;3t8tpxujv|lro_X_=Xx?yQ2 z2eV%QV{}Uy6Xh!nnA@W;qKIPYpdt02rK)th7ogAKFSrkl$iYym!S){f?+eoXJ4ZIP zMqHss1aUjpOD%l?l3X-b*U8FWCpL6jBT&qZbBj5ue^SyfR&8G zqVe!M2|96;DNk}P75(D$hZ2R(^$0M*5|TKs_nb4ycu81YPDnV-tXRQ-I=Jx_y(fjh z0J^x)!?bx&qsQO`f=WX`<=9>J0-p=}LFVfZ1zUkG3^p-Svg$uMH@z>>%q};rWKC$$ zW^IS>ozdJ+#6MKa5$AGG8aq0Ft|^R~R@c_m!qXbzs(BMZPeeIS^9n$*y{j>Os^Jf6 z(8!bmuk5{)T!*GUeFiKLnmSoOqQZyQF*9((?Zq7e%wQz8;(AYs;i_&{uon3z?)}*v zql3d7f-_P--MNOsStUKcFQwDPjHd8GTujHgLcRiJq7$*|m)VC_VzM&g_s} zTUi&s%!;4blej%z?!|4E{JlG~@$pkM(y!;QM=m)5phwU)f^(tMYPvkv;czF>i)h-X zk5ySC5u)&)cG3?=5X6#RlJqKpQq(DdnA~wvkV4r@>P&KH0?!qWxazJ}i)EhRztuxM ztY54trA~clbb7*+;O{Bd?s8yZW{h6cRy&}ycO%%vD7fllZsvUeaoPzY?&EnjO^0GSN${rFDz;pT5=_)!-gAa^zx8ucwoA!PP^?_c#BLAj`qGYvY3C-S549<^6Ee^1 z@$5I2kn|m(HpYi3jz7F|kbz@C%)!S1*&H2kb$1~PKZm1a@D@wg;u zH1kykrMqRlPaDqwiEQHavCDwL_Tk&>&toXuOSOt}l@}x-HUhbRTS>8zLlj5zl;_4* zz2n2-uLvi<2lbmRK*M+x`;Y!01sA2~W+Jr#eI4i$Za@W{B|DYSMP5(z-~Wl&wd<(g z0W3Zyh8iJttsg^%7q66Sju4|lyP+C7Z`1-sA&16i#<@RZ$j!av=)p07^IsUcP>N*m z+`cfyt(w(~LS7H8(Cew|{&)ajBE_FwiFArBQXc7jmzM<%V2Ky-Q=`=xE7(TBJk#VG zbEMwM?O7J476)#L>Ecl7$~B=D0KeNT`xB2=-Ot_93XvY`GokLh&5JT<_Z22Jra@$J zt;q@)K?Z={Oz_&b`&qAad9ZvB@n6iQ z#)TXDOZ5-W*$8B+XV7WhIO==S=y=&*cJOT-=#`X9-E4bG2wEu{zOnJ??>JX)$jYdf zCcL)#Vo&9w+^fe{59@aN_}6490cvW^b33{iSL~(EzR>wKKuhgbK1m9??b-GFs3$!s zywB06JK3eS*hb^+|44%xdNIfx)E0QVSEm8KS36r#Wk}cIm5EEniDHZ<-L{H?5Y2_QAxdWQ-?_zPp!5G;z+o|n! zUGyaILMW{%5SnB>(@}GKTF)HgoznFu&;CtJ4|%v0x;G<6q#?~beL{?^-Z_Z@;rL1r zvYQ`Hjc@XocB}CnS1anI2BT7C$O$ImD1)TA3F zu~ATrYD{tcPV#-bnzSw%nt#n$p?JW7j-z(>7C*8l;FzJdN+~{;cKEwFP4BuqTL?I|T(UB&XnRO=+qf4Z<7d5xWf)m%j1Lx|>GGw*`MQR_17$~frDCLFvkWL_=^!pY0& zC%H;0bNS8PrM4bjJQ;ivs)|I=*`m8j+y03}HDp@*HBC4!{JFiv%SXG?nm>6M5yGDXe4kPgvj`0G$sCwJd`p5l z^bb}h(gbgAsK8H$eNw~A8Ww}DD6GT*C6%uXU(P!QHY(09q`4w;98*X~M*E+)`W4V~ z45Y%kW3ljd8_qP=u0*47NPB8%AqVOYOZIE!0t3&O3e!j5&Vpu-GjCC|iQmy7)1=X( zCAMLb7SNGpd)T)l@79RFJw}0;{hQst;(j>Bewx1#w;fQ@>~~2WczE;O$A!qxn`sL( zOiCa}D_?4I!pDkzdHoHYhA3@!o-EHa$(|NyeuDtzZ!^(^sNknpOlMVH7^?zETFH3} z>+&M<`cU9nWl;FYVre~x12x(K+E}5SX|kV%sO+DirGefAvV{U$Bt^T zLpoq*l!N)DDvp`Dq#g}%s-3hUS_fN*$=d+dRMih%4)msR($|DR*HOq}XsfVnT*4@v zFaN%}He+;h9Zow1nK}`Xe=7KHD&4oj3O~Ydr>4RU!40JjkutP{sp<`18=~W((QhQX zOSaL14Kkr@?jtWM)HoP>KiVm@VD2L$BhGsaw3w4wS|S~j+3ChG3OI>D{tV&Dk^-Y(LQVR~W0KI+HPTdwiFKHJCE!62@5=?oA|Vc@9dnT$0P zw$<)O=FF#UzoU_LNjQdjuicRl&jDM?olu7cFvdK!p>Uur2LHZ)RHYmNhLNdV!i7+0 zV~Cv&^kl}TM>oP9%z+8rW~xUhxjC5^1v!E70c+cfmYp2>&Kr*xe#!Q_Oq_t=HYvix z`!n?>V{|n<+-3g@((89u6{~sH=l8$Eg9<#=EeAfTwlbf1?~%#y)C)(fP?cXU>i*v8 zzXCZE9((Wj)NCtz>r=H%`q#wxIw&%aWG@8Vl!hx2d)Y+u$J7P!6Y8;Wwn<%p)~s~v z-dw)Pv=l|LG-fx5W?q=F3tpi8zUYa&?7?Od=6d1-lS$87{&pd-RN=9w2RS3o6dyHf zq9sX&{ku@aon8O?i&5GJhfobKW~tKJ)$*OXrv@cmVED6#32#|?6Pdt~P-f{Efkq1& zO{kf*LB?lqj5)%GLemiT8ltxKoBXR0#eXf=T%x^85OK2AkCanW_W9M(I>mf2EzYe! ztan#}k6ZZOeODKgJ>)3?0WU^`r!2Y=$hfjc_}ES=%-U;o`AaOmlDJ7|H zvgr}>QV%dHHU_5aPBCIYviJ744c=4q+cn=}G}<-@3pX9G&}VqAjkc+%n=IZfpLluf zHALs=%af!N@Vu*je4vXN*648Y74i}6`7$r#<1|SZo@>N^MZ(7 zqCFIO7E$C=PngjDBkMgndton;l?1ZQr;V0= z+)i$nYB58YAX%#(cl z2FdKB6yW{hvi@DuxPI1jXL`dG`QYu5(i0KuWVTUc_%T|D+HJ>j*w4)dOA5RjE-&>% z@au9F^(f!KMj{W5IVAS3O@Zt)j_Rwea4V~ z{klJqZVXTZ@rZ-5aUR~?D3&Wfo!}V!^%^oFVFk$M!p;#qSSp$xG3j#GfoXyMxbggo z%Ac+P*Y1&Wp*0+3wv_H>s~NaXu+;1Mf`{Q;2YRNoW--+Fm~W?eEwZ|`Q)Q5vaXpEH zmxM#qNwao^+s+7CgPSb|G%e(%PkZHSPaJ~^j+~tq1OL`iXT3@}ljUGM? z6$dP4%voz_-_k`WB-;}dpC?&h-Lv&hPL%x2r($AG_59YuZ>V0`fQLl9waxe<&Lv}z zi-AD`aBbNkIR09csOO8(_}+IvHq+Yj`KsPp+<(_{!v<>^G#PBz)p`Fx7Te-aU;Pan zQ_%$zE+omJFJIte`1f?8`|OnPlO0tT`ByN3{VQAqn(zggz$;|S)&$)|R^-TTrmNsK zvAkHtybY`x(p<(jcpmuU+4q|&r3CHTGmh6gkG%}(j#8qgwEaZw8sy#YqZ1`Eo;U7D z|J2mmj^YRkm6&%06zoc8#-nnP|Ei%LhOVKR)^x33+7`6hcc&5SO>2fTu)rG~^+&7Z z`%LOImI&?wBVVXs0>QkP$0bc0f?8K-n*a5_Bd2S&8Ogp@8bP^eBSVxobx+3Nj<082 zrGFEdjS5D(5d$Y}dgYC{4ixRCG*Wu)7^(4_`!ps5>h;^DoSF1AzzPa1fam+qg*AAr z+J3Dcm}Hf_}=OopJfLJ+|9)y6B{NB-zh4vj6dQjm&+#ywmlz2);i>5#6UilHnk=pWe49 z+|}N`6S>$_i&IQ~?8(r$`+#(Q2v8Wk+)rzBn&rJa^XI_0#z;CHG_!A>RKL-mes>@t zD;nbMs!SHPhvvQtMjHd{_f&HfCo8lfhwVmAA?3-Sgg5;Sz<|Hi#IpxEEJAlz%l8ef z=DcucOY3^|JX((M1?6xo>`2hsBv$cz#IQkcYJ+`b~CCh;1j4_}#!cKc;C;hL%#6X#5B3?`bPgZ8+3M6yiaBiRfoO{aK z@8sX9komR)a?eK0V`Us<=zEKFn^F$__}3C8KbGu-ThU!CeH*PHP_p!1tHlllOTA&k z+20bo8722?a?(=YURrFUkE&A{Q;&Vn4i1l}eN3a)wl325zO~UM>8>0l;}aZHWjaH~ za4i7fN`_@>6eNIrTV{unc-F4v>%u})cHWzNEUaz}C)F#6{IfFr_XB}o8#7uNP_M>d zCB``?!1tpq_#SgPNQB+%Idku&5s)gxHsh#^8&Rxh`S7N6*$jBeTiT*!MXM?@PsVWx z`+6LZGU@cD^T$K}#_VeVKFO{&%i+X?6E7~HNQ-yotD!~dtD;WSM^-%A7dF^1_;91^ z^e)iyR|1?jopDRJIidh(p=mODpCP|W zD;tfR-16IH8$uV@8#uZr$_$O?)-3PS$)_o$T+uSj{bDUGDkpt9VLf>ZX4Y_Up^(nZ z(rSi~n;Yh)w0uSr9%fi8Q9^Z)U-o-0Mc1Z#e|QvTb`KdaazP#urP9p}p3!1VYBI_Z z;h$B!)d;E@?C{V3)A{v}uT)p^LDN`ay0LmkptI1Ke2K{RNse#h$Kv#HO{Ai=r!vtb zmy@rq!0S|f5qP%z{?vjt(FVrnor#3z_4r{kb(rCNnu;yx33yI${6m2J7|FLG!@G3; zrxK_tM#KkL1@%S**_Bw5`ERW^K+C0_<>ZVVwc;F!oYz-fk`qaNHO_qm(wtVM(R8AA ziuCI=r?O?rA`BfFH}V3DG`i0E3(+g!dlg&wN+d8@{@#3%_gWL2KOo39oBDJU+&roe z3Y)J^`9l=o=kS~I&I*vy^7b=Z7_$)QHvL8};G4mF6EsKNFkM?r_bU5PC`?6{sq8)= z^f*8qehw_r+=zYAtx07)WebO+&he-m4NnYOn61zbq*=zd>SA9yV7y5owU<`&X`ieZ zm+*Vgt5Dh&a?lU4t*yyAzUs^q*4g7(_NW}D4**A${O$^!D`IQwBskb1ap~mNwmwJR zY^pH!-&#R&oj`w3StyL+oPV7Xp6jZtAFsIA<79XgjgygkK%Z9R3;+AQ+D$bR8nBun zVLo|(t8M;sFb@cFM>{Oo(DT-a&mSM2=;Y^YmPP_J0R#6bj9t#wJAX!Y*z_QaIgx6u^>S7^l()(FzZd|c6 z2tg`|zGsYi+tC2#56}#-0RTFrPysK5ame9;=6iH{Q2{d{qcg1)e

ax19g~&JFofwz$Me4v&~Fa@DEikx0=GuNyTeV-h_lF}`8dJ-_?v99u zHkDG_fVOXPz?AeuTf$$Jp(xT7tH3Oikn3sF8imIEsI{wi%al(pAGu; zAc)^0paTP%FUafppswSWw z-x1x4Y09#@u)f3MkBmq=d+Bz!{lgb^sx*U=h4q}~q#5A&U7M}HI0$S9x9I%QR`9GH z4bz{x9@A|;mc$JM##hP|0BQchUnd?{|InxF-yav=}nK6<)n3Il2Vz8Z!bs>5SRXZ@7ezA}6^|WbR z3X|-}ra1@pKIWw+VAYc}7Zct@3=UN4IO)@u+IFq16H+`hB^Nw;ZtER>mzL&v`&s9n z^tvQ6 zsu*_Umou)v>?e(mb=rRx4L6vk+7}4kiyyGS#|9nT`zuYX9Q~E!b-30FY!qY@PXC+( zx(L`|q;_04Pb~GwdZ zlXR87cJnpc#^#A?j*WrT?8kMhIHE^?tGxUR$H%)*iz4Z#r6|;OU+vT4*_oG2i>bPBYRFwaio<4W)fNKbGM9{XyJfFtO@U?edW*^yg zeQ&jwBPQNG!)2FfO#oEBDe~D(Kb~eWYFKENMcBIaVI0~Vj*a+esw^NoXK$+gywiUV zXMA>gB3q(Kco7_F&6FKr^N@*f(*4>bpHN!jSCl?Tqp+m1xT1)>M|5dJtrDuE6>PjF z`~{u=1sp-+zAMV-CYd9lb!PcO;erm_F}~mhkCq3jhm%?m?f4>N~aUcf0A{ z&?`_#x|IezDSB3Ul|@HffImtto4FVQ3kpax3sO2Pe524z&}0=^J0apNZPH4jnN??u z{q8-$8d9SgZqL>vO}-wHBWYD6&GiBB)M(RGXN*1F>%*_G^K;l?vnKlQD++(^d{E!ZYkqyiXW;?R ztgsJOmy1@9!aE{wEtib~7KjBtK9$a}U?x=*WhQ1c^;7gI;*FeIMW&8~HZ}uljltM& zH1B@j1f0AO&!m>tyZ0-fFb(@d*cZSK1sod6+5+H$#ru`g1ppD(UU{8zB)V^~Zvo)1 zSeL>+>-f?>-Rq-!BCPh=uW$>vf{_*C(E97`BZ($WcAkcU&lOZM$={*0FG@kJAQ2y} z9wpEJU}NEHDBVShk8kEsj*6j-G#EL^l_zB6{nvPNlUAlbsW|VoQa!3sqj$a5cFo_O}tCjhR@o<2hAj!lDl;f%osFc4_c{nMBvknGyWt3s1P6vrd0ekRyw z9pB&g*^^`I=imajF|yKLP2&nj&CYA`NRYM>9U9FeVY|*AZ~%KbeB4sUXX7sS@off& z&Tv+ZMNyQI%4V_}jZ=}De)ZY=jb^Z4W6;lH%F#T;#=lG%rIKHev0kF?cZTVcF)__*fNaTf$!q;Dohwp>A^XiOvMS()qp`l8q zVeCH}R-lT#|89ufQL4SmM#08mGs|YKL--ijp#Pj@uLEgVkjiQ_svP}DsM4>#o_?d* z?AKWJ=$g!XJyD3`&^S%X{d!w%VjsNH=TIR?0qO+<=tEDF0+R%F&X0dqG5e}LUv0@N za!R((G`=D~0kF>pj|ZW$*cs3e(5hJ!paJ-uoa*OLsU`jy2O~B+18)*qS_LZ2h&L)w z-+oxc$%IFrG`{fhM_oE%+02D_2AdlA_p5?5AvT&K5}KwOv@ZL#gf(_LPaaNQ(pHbA z^X?I4DCwvb{VM>lgF=nc1>gc4-?f+R6;Dt*TKLFAWU)^*KHXEhK1&2D>|NkC|539N zXhdjIc1H8Tv%{o~>jT*g5Ag1Wb9ex30PX`DfCqYGwjtaV6rcwskkK9hHh^ImPAhB> z9TD#mYagM1k7$jo zDWW-p9V-yGy}tUNbTuHtqx;fmQbenuqP?6wk6v}>0U=0jfK3CQCKV_FkqAI)gzN2_ zgLnnXQ6SL=Xfa6FjCfkC2{hWYPEIt02V-Ja_k#jLjK($$g%l_!P@O&dnCLYYel78D znI16H_$qrUW&mIRFR0ZIkJL{nJ5;n;1#<1Zq81V9(u5{%=?$+YL~G;W&Q@%`ye4Q= zqekyY`=(#K30dve2U2mUPLukTPXK`MsstVks?gV@05AlUy!xl?D)OOnn>3M{*ACRB0SnWLD~?!KJz#I?2U=b9smHt5GOLxlL?>)CHB-f!>Hk|7-JX@dGy}Q zrO@$oTcSa6l5E_i!NA9-2$OQx-tXKvAL@JW*MwS{xk;H-r_h)RS3+XU=oYxO6&A4h z@*2+6BkT8*V!NI}lNA7Lf2!3)LQLwfVo!&GbI|+w-oMy1s0&UjXpa!2yc(Y_0Ip!t z=&RKu>N|v^qRI9#<0}d@DnHF5$S*r1G-+c@T5M2?h8ODC#zt?_k!4_E1Gcfz@Lli6 zKq0?`M@|_=4KYpa{&G08lxQ#ZiH`VH4vdWhJX$(up(K3#Nmw@HKEChTOCEhFBkx}W zbC)K4WK(ENEzFDwfPD~JC3NXTp9O3_F@-JwYhtZXJ&jr`uw9?162nh`7SKm!|2|;* z<5sZ`F{!5rLeC`Ae0g?-H*5y=3MPdGw$GELLsCJ$Nk4{_# z7Tc@UpAVLd=Ev0;6&2l>N^l4m!~QWZt8M}AHa2>Lj5Q%{q=v zM+7NUO&TCh4~i}%2~knQYc(09nM@is;py8z*1iD_b`}KM-)Zf$ZOAlXx?rBVo z_()~%M?y6^G^|Mh7c}GovX5VZUndu2Nhdd`)i(`O zSAsrG3O*49uaEuhgoejnHGUQ*Eqa-{w6&r@S3LzmR<=lX~3uEI}!lfU#wlNv~gdaZ`Hm{y5Hnvukh>Htom1Zf)hJv z`i+U+%n!k~n^dHFBuRlrM=+j$2lZKT9=!x!laJ+;HTl`3sGLVKC{PU(Ib*QrfH5Fl zFVQqxrMqZ49qMst`gfTtpwtS?``?5^us6}dT?1pTc&#YkmpF8du3WEo>T@&=-sJjc zUg}@ETCQHL$V@87MrpDfeGb!P1wR4o0Y9cCA$rW)x0N`W^w+?<2k2}>lX~{aQPJRt zIRL7+k3WCTp>ZC42=Oar)QfN;KFo%Q>_e=K1lO-*5?v066JNw$Kbm=bftY#p7Nm^4 zJ`!pkztgXU0swRZ%fM}*!)6OygtmbFRkS{|N&Q1(?ZY}WVt-{iVA9n?KBxYX!F^_T zzYCbO0NdZs_7~ZKen5@K)519(8}lM$mO8c)JM*KW)T^;)`{0ZL!+-_4;QckQiS%ZU zjPGruv*4vHyvANPn&ya`=*|ak$=&(oG}G-<7fQwnsR$p0(-g zun+4{gZ&!7+Bl1K0Sj;~VCic4nbtB8!+rPsAfcoY&^N}Jd&sO>Xh4C5y zFJLD$Y1pPEp;pvT!(=|66sp!olx5?PvHr=Zb3>I(iCJ}oym!~|i?O>?I01YaK$=W?qpCA% zpP)nK92Zu(dQ`grOL81VMyj~Wx{Zw@2#?~#KESPBt++rulWMkCXA8J1_ivqNGm&3f zcz<$_7a^UN{>r0ZeCDVZ!b1=z6^kbaQPI$tDQ3Z&&qrl2jeUo=N?lqt>LY2MXq*(4 z2^4Z3$-E8LHHz>}`wg4%Z|Vg$F6uqGoO}R0m96SibQg7uXO%t@>a(X30a^Ch zlSdl`hk9|(&R*D?0N~`M*jT42?pddOB&TGy=biAen&DB+8(T>!CKI2=*qf#ruNQ>Z z6sdNl#p8dj36gUf#6j`TEtPQT;mg@mnR< zmC`RhB$5oQJR^9@8Z3AH)8$;WKpAeI5q&!=|Ct zomnZGu!KQXwvwr4NYv+ig2Z}jq&tN_BjCHRSdD)h_oOhS@&;OebeM?73jgAGqub zL*CMOX=cI8Pt53X)4tw5V~#$8pe8@mlT_o*2Z{JGNrB2wEXA`{R+r;d>xkHgAo5U4# zQD(dQ0k`vN1wgAOOXroUQg#K@3#S#-8`O{nJ%=ppp9XaR0EX!&FR(8R0RUZ~Uxmsr zy$Vp19~wOp{pQoyqfU=LgxJ-;G?h$KI>r{8^1w=t-uXB@`4<- zWM^@IK*UKuhG11=H7JBfZ{$$bb64uW=96QKVxRp6(JvT#sI#A+hI0q@rqppyQzSIO zJ~B@!_4um|y;JZ12gBC%pUFN3qhq5))cJg8n$sP9Z~q33_WbwgH$#gyrL-K_Y=FBrRRw&#dbg^gzC)%o(7#$W9G}OBUfCYOF&URoKE%0?H``i%w{FIK_;$xi+*{7Ph6c53qkSj?o04RyN zPIaZDsF&piGvWiz-4kaYe2QiNh#DbP?AaKeIt$w?O%nlAIg${XxkPk?-}Kvot$@s) zK3~tDnBsBIq_|}GNM|qIk~vgo|HElGcW`1~6Kg_cdqaI_mho2=t4X7lWsUyj=-G2; zQyP!|_i@Ge?RVau{lV<3{jXLoR>~ijyL-DAezfrRU%b6C=i3aNyrgB)3~Kc1Ea0*a z`T@{41OA=g-9Nv(D6ebXNqyd{jGd6G)Q8DEa74P9ec=WGKQ;=w0E&J)4XMr)_6*b&9TIt@kOGBfpJt^z(t!68v%UTkiR0nOwC=TROk|$~nGQ(G6yj3=1sde+xm~w< zd02a9Q-##t4S@YJMJ$qI1!gYkbZGYRIaX=OWqsY~qj{fG@0=R`*6_A3Zo6~m&i2mj z^FNx88Q}Cgrw@Mf;P!vL{mw6hv1M6HKVRDS@AiH2zdrHJdVZ&8x-#AR`Bv9mf!}9? zFsvz(q5kRWESx*|3o!z{Q3k+1P@}7zSIhF-&az+=rpg2Jg@IOpJAWcyV(}P52sVvf7vS_J#nGI_f78GRLB0RR*$Zl z8t(j3=kcS*_Z{4K_ipk!_B&qOF?@9R(7{7@e|Z`e{6Z#XY+ z(xKV+SGD(Oyi;$AVKuT30BFI)f1kMUKQ2`M#@sT_e{qX7er|mFe@vGhA+khlv<1P| z0~eup+&fsi(C}mGO485>?5~P|$TdanxsMM&Z)*oR`e)eGW;XSVLsK>jI`4@Hsra@g zsBau4k3Hqt_x?FFZ9f`MtrOmi_#57*W}hFA#M(gjj!^9g-5b=Eg6`BsP80Y2E3MjW zW25|UH$`?Rb{uvVxFjk}0pPoStx_cJ8DEK+ywA1}-D25Z%hA~TN;))gzI?|0)k8du zHeYvejQruq*22~!Lr2_)$*%YC9}aJQZtLK;2bJTCi;K(4%SwuW$4fgF{$=6z&u%9U zyJ|Rjp#di42#&B15}0&;cfZIxfr%VF-%j>U*{m-#32GPr-yz)a-(#G*Cs6WK+lP{I z)9#J9^+M8v4ofXX1|UTw+2_Yu+bH||C~F(_S(UXO7S#yc-X5l3m1wyXt2(1c{Hv{1 zqryhYp<4;#^WrlH*l-B|VDY$T>4V>QB~>D6fTh-Eku zKLR?R?>zNqr;Z;xo`&o?pX)sJ&Z+N?eE0V4i19;||E7HGPmcv})?yv|(_?4d~VX9QH@doRDiP=&R*D;03PmlSEO@NFl#=Yy}ZxS*!jfj&;~y5 z>Y*j}uTiNO)f926Q*)#RqklPi{Rh`e|8J^3yW{7^ul(bcbANSCKFDLE0FEC!KKuRI zi4P~n{>zxvVh#V%@Xi-^zP|tUG$XGnjC#`r5^D18O>pi2;XIYNhhm}u*8J`wu3E4! zz}W};QlGpc6YUi{Yyp#7fn`t!Pc)5tGm9orI>h_Bb0!tp{6_8v7eEJfTROW`pu>O_ zSzRtvL8`ZUf351uLEG< z;=nSiFq1Azu&0hb29k7W#_>7CjHY_dC#i2!ou7B~WZyDybd{D|HqmH|M;S%D2kP4Z zz|gmbdcV@U{aH&we_4>zB8-Y}s<~ z_YS(huJc#<2w~*A6tkN&Bd`zp>5Vddv%>x=c23mp>-gihVPAr?7jy~CU#(XHkC578 zLEu3)1z>{u08HTAA%7_+x)9Vw1&jdQ5rtD!d$*o`PI6BsKA}@|1-;?*F?vDCjB9!_ zskwMLn=f-H!Wk;4d4I*D*KGL;%;2kx$QoIA@p}QlzC?Ik%uS+sacu(Sm2F0l)}Ef` zGd^d-+>~Yf#%46d^|7z(d^mgh`M1-ru%nmh(a#FiI`x)e>qF5UDeVDZpS=$oFgHI( z5&+E2&mDNf_Y;cxOKGco_8`B(qVtL!Ou{68I^{ok`6eeh9=PrcfR zRF5i5>c-XNbEwDJ2mN>mdLyZl-~KLFJ#hAdwB1NGGbsbV zp3i!So=m)@$XRbvy!ecoI!!(w$vA&WK11nxda+d2HX6}Hf$tCM5?73U5*brfqtYjK z0R$XsUm}|kUX|v^d%vT4RcF**>fY3ts^!RjK56@hraPb0C;DU#L&WjI?(6tt04{I^whLz;=u+ey<>+EaMIMrTe86ki zAsqa8)oE0$sXThVMtrCzlUDb6+JxrB@t}FtP5^KQFbUXa!88g~I;$96X@%mX{?FE9 z1VcnM@ar{^P_J7k{lOp~EJbY8q~HuToqOmO)6G`OKK{uI|9^Y$9~;MU=L>!cpp2&A z93un*nmR7B7J$+&)M|HlT@YKsGD_b$`^4 zuIjGp?jeWNulm4fmwLWaQ|#{f%%{HJZ+#0aJEooScxiQ;vd43_I;7s;h&}mVH@xVR z(P|T2_a=LEuhnQKq~9~Y&BTA0=zq5V)W|8D{e6Y;%k=CCULC#GYE&#tnwpc(VA4%L zDbau5pkJ+%pV-x||005O@LvQu2zm*@N%$9l=c7K!I_QT8o&uGHOSI1&B~8$q2oCbC zhax70J~mssjpw1wnoM|7dT-?(@puKnVfY_`)cM-hU<{NoX&ag}{i!DVYcc;R;yM5G zPvR{=^MvB-fXbfF304jO{}lwUVfqzRhqE+VmT!?&9{H`Ya#Feuwb(OEpR%lIircSE z7cDw8V>}k^sqIKQUoDOYbX4}wu($3}BaI#akfkwI3X`5~H2}P1TEApxQU=Qm^sh?1l3ogv0{lq2L0RmcF=ApppaYXCsyygpMirur5&9h$>FPyZP!n&KQ9BER30YfqIo zA=(wwy8H2f&iiEix=^O~0{7@+A7zvX8dUnid4#c5?*@{})WW0;sdI%cWY6pA63DQw zNd?F%Xm`RxDrd4c5sblK0LlR1e3T0+1B2|+#hu{pk}{|uE1-7;aXctR1JqOC6x z=1=Vc{l5shKz^RJr+l^_)2#CBtLF1Y!_({;_`Ke1FE}(KM^(<;p)1fzrZ1IqsNVm* z*ty=(=sm+|p|sd)ctE94J}Y(vskIuLi8+24%gN7(GAT@&7PW_d993fX2Z0b|RfO!L z($0!~qCK(%dJ(}aW71IMoLUrgLY+e0U5@RHl%)sbdwbvm%zX~YN>1uus+?yE)I7(} ztw!U27e7)|2-Q8Ib%d07*naR5jXF0l2?~{9+ym>9Z98>_~oIOMDiD8f{-irmdQ9Pt{uO8BF#G9cu7< zB29Z{k7qPU?i{5n`(Q~AA0dPEyPcZ|ZIYRL;cd=HFcB2=@ZgiWuyUx=v5q~y}a zRHWW!HJQNn_E=!E_zy7G9rbU2Z%UiZ==}w*Olh9?s`axxigCuFguX@STL?}m9LnEI zeobjFQSS)(d5!#hp2e5x(-rz`tWG|J8qHDPNNq^1Hh8wnGx(XrVmcsxP)0qlFS?$3>~MC~?v z3tNRJi~nm!ZHEM=F9D&rMiIxoR4Bis>9Jbht)*-xwbdjotnkc4n)vBf zH7Qx=tL$ly{ca|HHOUJYSyDBr2Q1R!qN+pFb~;M5>HAt?&}cuU|59~?IW#5# zNEpe|^J5}kO0%aJmx_vO$ zkL!`8N};5BO95#4PrTHVHOi#jg)UfU{f4`vYSK$$rE)j08l^gsBf7oxkOD+FPe+z; zeir^1)1>V47HN^^2PC8FM$aHyk0f*H_3Y6b+Un0_53wiE)W6}=t#N#can>E7AMiDx zj5Esze0XJi7t?1Dc)N^^O>q@G?!jW>@~leI+V4eN+n!}*1=aC z8P;oVPkZX^@j&Jtq}uN-@~hEwjoGff1H_igA!AYxSWK*=uM|oz70M95=e1U20T7y$ zA(KPXtCqler?@6P39xEUn_@?MnC*?djVv+MDK#m8Rcx%18ptuzNK^$XOVcli()3To zZ1jrAi5?7Ni@j?6bit%dJ91e%$z&btiBRJ{ z5X>(61PDRTfV{5spzAU!K1i;JC+hkoZf~iHCwikL1P7IjQIqP-QmK@%s1X~?7&$-2 zTFX$u##hbCD{+Rc_}t2~Ze4BfC~8mtxQH!~fFAM>*03&r)n3Z3 z*x&wmjt>NRDVWvhCmDx$d!785;((@Fzzx0a6D&EtpgvC(mTcxkG1i?_!(Q&U=+Od&<0} z^Ku`+1#ONm5%+|eu6*PbZFeLPYBVdCGhTUQXDgIa?dfrS6>k@44CN1Roe zCY2SE`~~1hT(@$|>o|WH@Ia4n59#?~02rACo&uG1Os;~2oJkRa)Oio)^+>XR?QhBQ ziYDKc-iCoa0XjkmYU0mSa`gfD9|AWqawWZg`fi2Xig`uzj)xyJRa;bfWVcjj#GXv$ z>2qyz{5>GFDA3M~N6!+?*Z&?OeJ>`5y+QQtie-}8l_~1LGS+Diq2I65?`KtOMhF(Q zkL}tdt$b z@tmq7iT;)xUQy$DLz|+){)2FR(h-7@S&S@*{Y9kxN5CEU3-HeY-$8KFqZN#fw2Z{j5YBS5XX!A>^+0#ER(&I(?$3^;_;83Q!x&VN@vrJa$`^UxI zuO4W(|Gf6`EYW=Z?_u_+Q=|6-;&asyNasYpTD0{l-Fk*SH}v}r^3C*W&74V1^`FFN z#zz&M_wc0pZPIl4GDf4w zyNnu*%mN@t#M7zVvfBf=*TVBj7*GH>56>q6LZYoivgC?d$7B9`?V5`oC?;0T=ZSh} zs6yuPjLsuElAkJ?w{LLSC(l%y=vqhh0Fbx;_Qqq#63yNJUcvZL2b7&8HZ5)SjLk-E zKL7=l?-`~qp&I2au~^e$t3GO~o)=Rz?;pppcld3j-){gQ-^_Ry%gHw>BP71V5>k6I zPPv-M^klR0A_6Krq#s$wFtUL2vj9LRm8zfs8O)=pA*$R%R=GD_nP{|$W0F1T2uV~| zl8n3w#Qv7+05ClnZcTdA-0#Nt)T5G2Js5ID+dV?4QG+K@;m|z3LYrSQI#2&taeAuk z37tK+fG%&jIy4l}Az6EgKgm6)u6AlXNY)a~vX8eJcHcc}oYWiFyvEu{WQJwhJ0wsd zBJD~0{)`q%0Om9HtPcS^gZHjJhpW#4;Li>HUXD5b79u9q=JjS}>d~PvpeU?!27wo? zYG+4U#Q9+a6eF`yEhVZ}0MHfI$SfWQ06Z?^NasMyc8wN06AjI7AAgmt*Q6L{Gk0b3 zK1+~X&+dVKB(|#(j7GYF>)d7w=t5X+hSN;|o==!K4FihvlO7%SsPMFY!IsmSqDhsb zMRT#rBe{KrW(CLR?8k?=0u@gYJCdI^$(3e;LxHVuD4@%}^6Axe%V^shPt3-WC7Qec zy@K(h)Z8!Vdb2yBK)dtVJEX&)L_G8PxaJzdd+*^H^34)cqj{96DQXWJLwV7ncn^hj zv{rz=NRu)J%2ve7PhlQX|0CcUpZR${xonCRP6~N zKc)6eRiLs$pa+B?hvQdXQ9Yrkcj;Aiaq6?OgWJ%dAxIzSiwMr4`XZ*waTOL{@tLXe z^l1BY#YnH|^LO%2j%fJN;bor;P3yIz7^(*_z25G4%=Slz7kx5%eFxG1)*kIClBq^v z(U^HuYOL*$g7~*+v``MSVofM~hrKxjmRk+-%@X-$SydA$$~2La4`nVadljvKD)|7= zHR)Lvjmf7XmGHYxY{7N}iLcf3AW-$sxv}Qho~UIdAQs z-T~dz^epKX912je`gVHEsH(#0W>`&%(=m@$+PprodA+W}3>=!N@HmS}r_Z#1vpW!NJ1+g6<^_6~MTUraLHcpfH& z2VkgB2Jl|10fgk`GWljn{f5x*H|Y0F{sBG}Nv^Mt_*9XilDk771XiMNKIa|D#UV(8 zdq|^sy7H>Z*TE#fvNC58Od{w8-UI-8Mz`nhV!Oh1M>X+a?msvP|09Jx7X;T^>^c8# zYQHGtAV_y&%ps5wab`39u-ar~$|F(dCp}sbe5(F#*~cTVu+l&6Nv@ht8&4E%m+Xm1 zhmtGHI(r&>)6P5-(D!WBmDpb~-IIQO()(w>6QUk-K6_jL(Glp5B(g`%D2pTAenbJ7%Cl=aEBHbEHA`b<%O zu{cu1o)-Ijsw%8D(FLzszZ@g?&qv_gbdq;;%7_OUbt$pJ6iF59e;oKdc+?)U7Cqn#WlCqG^NLqgYENi^qncoCWY-u?W-_te zQ>@xhoUy8;w00;ITzZa_{<%_(hUfx0OpUANldCi3QN)Yd7-veGMdydE8!PII_H-z6 zNVoM_d1{H;+NuKOzt)>mK4H}&b~WwEsnPoaQR6dLN*~Hj4~7lNL(JYZwCN zwf2RV(0UbsYPsBM44GEtlb6dtNWb5ZPa$iQm&^34bvidg{@@(of!00Dq;Y7PCI!zH zBHhY;*EL-*#>Hm*_f_ML+o*)VlRkUPB!JKPAte=k#gR!Z#(Rq?P-7;O#Xi~Iv8H3~ zQ274hIZ`yX8VZ2NIrO*9Xnm2yu4zxTy*ynU3aBAEZ)|f9X?vfQ$h6P*-m0#|NeEzy z@_W2D9107K9&~DSk1=zZPMr|557X>EwQ30iKf_{8@3k7wSn8X^=J@CWk3_A2#p_u- zMD5djEUcq-0DxH3HL)1D+5upW9q{jX%NGQ#K}VpCHLk zy^YFAV8sXEA($lRC*jYEIeyBMmN-xE#Ltj!;9$nz81FfzgWAu9Oq^kS>P>55D7LyZ zIa|?ZK(h`vo(EPEj%gk84r@h2eZm$`G9qXVdNo^NmKz z6zs@*Ge?%}$J?|b|NSJ+^6}7*ZsVmVP-fNhIEMz4@MoFQ67u_HWEFz04Av5P$>pjG7NUnJ?ea; z_YpRMDTL9tx3v_zk`{i9pJ5)-0 zy)jO2hcMhGv?EOf{Tsf6+(z9#tTw~xWq^B50nlH4NB+){ zpEk)mEZV-!{@b-@(fMZ#d&g(>&tUbCDrb%kFGg9S_Wr9UF?~|MM`wUD>O(R?d5-$r zUQOp2j5O-h=$@lQ(7+s_n*g{B@c_h_l*O77YweM|=J}ZvGB2tNIEu}8QX@;|I~xK} znehoy6Fc2|PvESmo(H?)gFMqu$NOm%gwMgR1Ucn{Mo z2UD{_lh-hI20*7(p2dExI>h2mYXJQ`IreEBdk)Il_FYq*CVOS=e4G7O#iFKE`^D)Z zfYJ1wnx;?cKG2XN1UbhGgV723LN_oI&?$d!Nz|#)`wiW|lur~X-efa+5u+EDO7>_!9cRrIGQUD< zD`XzPhG5nGGAoF9Afb?@lT4Y4KEZXUyfR#YLcd}u3RJh@e;4!_eWuE@DZVuOjp-u# zh7SdF%_kc^>AoI$-TJG=o%i3iJ&(@kSuthmpIyVK4rzLpsHy*IQOx4OkHIFr3&Ng+ zky({Vrzq#pJ&P~`gyY9ll=kB#iX$u zQf(wslfIE;u6|lk=kEYkwECe?xlCxwWd9z>m{6vN;lIYt)0^Ms-&jELpCa{&CHm(@ z23Rc;qhd_2%KVdRY4|!v3^>S^LHKbzh#3~*uVFi*ZEBHZBm0tz=O{+ zNlPHz0+KDwu%|}j`=+mSPCe=Ko$&m<* z0OtWEU7mwf9V)7iSyw9jQ|)1O28?gTd5fBktb{9$$9c*jd7Dj zpQc<%0AXjN;ZlKaC<;`*O24YCh!^i&sfwxnbTPL=-1F$X(VksTeU-gdkD0AOQls!> z9^{;9mH?&AU!9;85uKkGJAF-HZ;|2~J**s$B-+U{>GlroVTNGBCo=(^h?tc9&jUiV zmJ${6VdJ=z6`~eh3Hj9SFO=}TQ;bP-#GR06%QI|&(@m90S4b`KxyBx#_cjTPMeI2O zj4VW3+Y_;o86AlAMxLy({{S)H+=8AjrGGlFF3M_=bS4@eQ=t1}3RLn=7syZI>v?o0 zy)UElM*GM^s%43y3xYkBd(G$XhFJpnJ4(My;`a!l5}gl~pi@GV?xuS*B~p*9Uuom3 zHhYI0kb8hClpND4O#*% zC7(|@-zT4$=WpWk{faW*7rh~=u(qS}ObXOcPm_M7X!=Bc#-d3(nM3-X7Fp_0{|qdL zlx2y+6FE%cYFibk2ZWS83Hv}E)4bhG?Gmu8~SrL;Oo=-O4C!eVS$@zXLuftAMUMvc)C{U9bqpp zovY5I{ql5Cugct^{zVQc&k~J2IpiG3xeN}u3jnwa_576B*>EQ2H)l*5%}jRL4Au_u$Jrr7BSCeE~fB@i?2& zlgH*`_gzHi6YpjF9qbj8c9~9gT!%U}x_u~7dp((hu-b9qIK26oinOc6WHnNY8ijl= z>C=R~%-1y?DwNk+WPd={TI5iUev}MQ`PZoJS&RVZCjnq&QvbWh`2QKtj*#Z3N+uO(@lZgS0u6yf>8o^P8$je0wf4U< z-R!Rx0rXdgR?@1(x7S{-7KZ|At!%&D_VMYWyuR1&QtS)qH2@%k^O^U8w^^RkKB(uT z=zPjP0wc3HKMN*7$lUHNt~aXDgTN8sFmR-EZHIi&-J<~J2ECQknrOGJztW@dDeqNsMYBIkW|DSFlQIrfB1;|U^LVv*e7XqbYL@pA+@)l& zCO9mBp@i=<}c}&aeh@$gpGvGa9Qd^`xc~pL%wPSvJhwURCwWkxH6WovPPXcFf_gERv zgg_>fh8eLY3FSPCHR+c73nhD2DH2bDt{LOJ<^i)PiQPmV2Sye)s9I|Zrg3_p!$RR+ z(`^#=+9xLagn9hhOx&os+K9rZC^%!TXsY7VG-*zI+jvBDemSSTt^ecG#h3zxAW#5x zS_%6^^CNieCZnhPrpa)+%JRx z_>7+2k$808_&iu5@ZhKb!pJJOJy}W4>)dT zQt^BlUR^0@(RuY3o<2>COe*v9txs_D{ZZoSTt8|nj$&8Bi~es?8CsF%e5%C2q)B@* z@>CU;6@_m@6{hEkrmMn4CTaUBQd{@g_W0TSUA@*<74|$O;(v9S*J-||=KDoI7Mo^^ z7(J_OKgFZ-iTi7MZZ%ChvVdJcm+53r*1JNnQ+dwiNluOK48o@qMeRqdaYl9F?eSLq ziYcD{Orf-F+Cx<5GVMG$U8a9sPoC$;@15EYikGqGiwJ(fLkoZhx&$&P`jpxe`cq+^ zwS@6kjjGw`6*bxmCT0A~WA{dT0M>Q%Yt^9~QTTRLA%Ly4T+wt@xKeHQPZt67PZw9L z-dOW^?9us*@w1sb_?6;NwI>;@0bW_mD)<$CYylsS0l>#&cx)lZ{ZgL=Z-S1q45t}w zj$%`_rssja54;bAxZFuT&96rF(EwR$G->a!EieuZW)aNJVS;f+Jk}&oze_#fNAMyB?zmoEG>-z!6NOJxdGxDdhoyY>#{P3_(s=**qVw8#lJoZ~q^8c_$>6-o zp#U1ueT*|>%Kf6WLjI0YpVcCXMdwrRukm@HAA-IwKHA%ZgeTklJu&NP&)%VZPylnl z9DD+w0CRI9)-*wZ*na?k`dwP~Nj;$Ie!)g2RkU8V8ckr;}ck<)OjQf>XxnzmXo9=H+fzl5( z`%Z6m=hWzZ3FaO>F^S7mzj_`-g?w$TJ+s*t{lGFNy%N=UHZbW>p$v1ZN%k4%N>=$P z=^>Rz(@G}*VIsRzjEe{jLx)YziBWOLqfv+2>@^$ueucK4WS>C_H^{FkxkWJ|R+l1T zkSqn7uH%x5QnR67DME`ZW!Pu*473rr0_7MFrYJg}zTfBZ>QL-CxFYt&(iN!O!6SE)p#T6N07*naRE1yd zvZ$p{C$ZX~$vbYoUzAozFbRN=+IFJzoIREEySd%6Z57jDk?+-QIv!SR4(GFXXd8r1 zP%;Nh@ZB<$|Dsq^>?H+dpEQ^OaD_y_X|V{tXYi0h*cw=pd`;{mYW+10fha#;STg9o zQT}{u(en+lTfJU;R2`2BlLj%JVKaC7?l`$c*?&B4tF3Y3@6B3?lt*>uQaBTdokb#+n2dm4(3-0*E`IW|f-u5M@YVNf_2OC5|ks z6u}#SXZMY&Ou8B6Fqy{yAm$Z?p*MA$DtrE#l3SGa5?;3=`RVLT@J7~3q&%uK!#~QsD{FXv|k3c}%x=XdjYE5wD-fR*23ei$4j}3HOkyOnQv~LX%2wX<~&agOwl2 z>5}jU+104ZqzJ9PQLUZaCBZYnqRHhp)TzFVR1Rsh79PP$N8Q1FPYT%sxdl$JQ06C1zZsd6bN+@%46}C>mS`4>n!0hk#F?zSh5G6 zF1ins`;a#}Pd`*d=w2vL6-M7EGUjXBIXY|?5tD+@3H9M%E4^LyTa@3^UP3@bLb^*@ zLYgI&l3W^Tqy_2jmRtdsS{jyaq?AS)ge4Y18l}6N-S2*`_kVcLkI(g7&z>`T=FFUX zX6{jF{tHSX2|_1lTgMOKDO9WEo>(wb6+G0^xr)@1sfJNvj@1lm6{do~0UKU%UC=FN zeJB~gI2$i70`*y6Ihkz|qaaY$g)_86!*|%Q`TSz}G`28=H$+;=4ukj??Oh?dw7!?i zWp@>OWr@f#kSE1s@jNK-zyM{s?FcRYJFDPjZVU1;GoP#rWq889XlwidRhxZ1G3w1I zaa0tTKQBam1qaXTy6rQ(;FNEpIXsy9(9Yzk(56bR;aIz0%_PxmpPWV3b87HU9Nw3q z9r(H0Vu-h8QfBVBJO|JUP#^{?cK7~JM_@o9cI$QsDe6)_Q){Uec13HaU=(0-W zV6JV7F*J+Q=xCd4Z9Vm4!dLmYO;3Mz$TZx1{I9h@1NNhbuVK5Bxb#WN2>;W!Wt zS0cIQdm#7jSo4S{6?UvWkC_*b@!EmL-o%IN&ZTmXVgLYa$*L``hAr&vVq7_vh}f(T z%W7BObgSfORWFMBaRav-(qkM6BQ=H>8Uc&q)OtsO9{xW2F85eS7c#nUpk4cqoUS|KtB!rbVRRR^Fq5Ir&GJbS z)AzVFLRl7UY1}*f9Vh(Ox2P}MTQU9d>;`6D9*k(G)x6OVb~4{C7sQ@J6AUPH)B$1$ ziYW`cLC2APCHtkuy~$qC#Rp(yV+P9kfqyY(v?a36<&M)kVFJiTnOBFr$hsy!Upyy% ziEt=ZfzFTuNFc#?TyMY30+I^s9u-FN2wt@*8t4z~#reH^pSCdBXArxuhR0cyyR3(@ zR=@s}T42WE_@fAVb$C^mTNo;XX2!w?^oLH7PS62*$PWvP{(fnc%`v1ulXD4Yh^uvU zQx2W`;M0|;@AKB85kVp3Cl?!>d3H;@t*4)T5x#<^m*ey)1%j^#>7xZ9X*96>3mWw3~Nc#z)}ab zWI`r$&*B_msy#1s`Xe0BU`D#}yB4$MFQ=>sZVb z?w!&=aetZ{KMj{e;lG+4aTA672YJjv8FVD#C$ZkW!w$G1JqgoqiOSRr z|D{l;T_}ffvut(jQl2G!x>m#ODofyJyJUrOEca&6d;Y9SnLKIytXZ8Aq?1f}&E>Q$ z@?=!zE@VUNy+f1a`fHVzl(k9qz!kSer+2^HB%9;LB;)G*c;L7XFn{IIvQYl=549)vv$*JTrsN-zimml?t}~(+YgN zCQ{}mXCCHZ7pYX(c4yCf9+3av89MEd$SCRIH7~-cj{i&J)@G}gYhK}_baDgx*S)^! zBSQvuwlcK~jh5nRD_zciwgt0*u@nB(4vG&A_ep>V_nUt`R%B0p7OaC}FBucMomSv_ zD@n@Rhumh%Bk0Q4 zvDdpOP)+tu<_G>dyssVl;EfH@n={gXp@xXRS(*&is#+g~6ht5``b1?uy(Wk6nyE7R0 zweEq)MM&j!P3vkA;|wio6D{^wBS8I(~ilyj=0>vVKFdSm@&*A1mFR`YNS%;H|Ry zZ@J$RkkJEeJ~e6VvKt^Ls>l-leRalzJ^mF&`cB6<H{wbJKj#zStEsEaf0cW1n;&3)f8;d(^B0kwWyIVjZ)c~M=jGP<=5`?A zbxyWKE49nSqj=k-eRtp$B0r~6-N21W_w+`n_3Gmph;>~9@QFg_JHg=rx6|AI%K8}d< z%sr_pFbExov!0Rv7Wp8zL`j~GW91B--HCnfo>J*`muItZGE+J zo4TWu?_DCE6u$d)zYEIH zJ_B2`L0BTNDc3<93m!U3FP&sC=_(6^H}1?z=A4An1V9X#p>PE|IgT)wovL^Z0cGfD z5smz!4q2kSJod95EKmV~D9!SZy{0>PTzsr!)Xe=?c|&6!(51Ak(9!;J`|W;qqCAEv zYV(q{Q+cCGI{!f8CN6R=Wa9eV=ypKW*Y`RF#P9>Tzu!X0NS-|RM!Mk+`TpzisF!KA zlX3mc>voLlueS`ql|{!T?o>b$K?b@{5L<-nvTYQz3uAowV^ zUmW%e4yKn|wZEU2rS4lXYQ4I0VCK#X)vt){6EVvD)tDYD!uA+9)ul3JO3Og~C7o)D ztq=L@%1nuhfQ}L~5A-u^FaHUX!bgk@5QYaR#UaP$n^KoHD@26XL)xTJmd;+84OnL< ze#m5ho}q?U9$XXrRxw0TYFpyoaF8^CiTNyiizYN_NqOa0A@PiVI?5(0jidD+xviu) zb|aqMI>;(YN|+A6kp}#`XCASsxd0$`iO$=;4DPB!IiQ?YgPqsA`FbLfHA>qAPA=qD zr@B0aw(UZtcr46Nhj-JU3`fuAh8gR1gZJ50yq%3Ny=x=WbyQ`s{Z%*XaG?CUP$imk zp|`b^#%#^z#=9S94F?vqwrFivbbJ#1)p+-_sMNdE8h#@sd#Z3~i#sXvD&=m~L!SZi zFClgE>sqior?PP^-mOX$_7=JGv8RTF`XY5%*_H&9F^PJj(2k=5-JShqnUW?Um`h9Q z9aLT7LyGODe!toyUYt6|Wp7N39OIYj1Z`w+s#rMj;<#P-`bnp{EPei)urt6TeYT!_fAColtSF6C%Qi zoZKIX?=Qi)UE-5L?GopdLXlXJk?`kTw}!5wt1efv%lXr@FuWSSF5~0hRgkRrb9&lv zEG@&jy089#&N%u*U5`R_$pxWIayH@sz*y)VMa|0_VS9cD5$aHrt?AcUX={z?(E2M>nnJ5miffp_iKbK*n zNWQ86e2QASk83Ms=}$_H)7wvTr8~n0llHYnqoW@dwqAF6aNYM3A8FS(j$mLj_R4am z$6&-8B7iV^Z9hLE3p%bR>BNxN8I$G0kaVTM@RgO7>F$J#H&rO-PLxq()WKtF@6C9( zzvs!HH-OIkgW$^J3Nh4{#^tP7$k`ye6gwNm8N<2LKfUlHCbjeZ7bm%z^l4rltVz<< zDH#UeBDLq#zN-CM06;ne6YNUnjhwWxwyfDLtqxha&tQL{zX9VPy}XdE3^nR@QD#_Z z0;bu@mLJ*u&1i`!(I7z*r(-*O@P7Cz-s4HziPm6>j%Cpl@0tba(4>btx*6aT99$fJ z1b_b=jXz$f>-XcKyCk!l`|qdWLqtIrXrC`?P*0Hiqb`zB*9s|M^&i9RyPkW!$b2!e8+y};cvwPmwq2+CdOv8SRA zB*J%Yw2q!nYFB@Evf=8Fc;50s^9-@u%aM{XHNbDfIoFjA>V3z9)ufsSSswZy!bH4! z>?Mqjjh5x8q~j;us$22}9P7*)_B!s@(qyVZyJflZM%8giN+y^5DSyfJCnnvId1lK_ zdE2t&vxc_hUyD24$vdhOev$l@+WEs7XWRaLc${M~BtcvPhvkYxI> zn1IVD>vsp&BnokNJ9!of_*qkbb~ze-PDyx8*LBlM+1`0HV&8ZuLL!X;mX3N8}<~0*9l1)0GK!vgCsg97K5IX*mo~^o97!7>t>Df4Wp5 zD=qS{bW$={^32uzJ!^u@WMX7ZE>`~2?f4o~Fi8#_CHj&mhjtw;C?##F1jz&&CkJY=Z>G@mQCGXZVNA$$t&XPTr_*yy@)@P@^_jNG5xfRBj&Ur z1#CtZM|kpRVF1E>zUmzqF%v&oxXTSMy;*3o*A6@py5LbnHks@T@N(=6cza064Ob<& z99O*C+Q=4{D3xQpLQh(K?q00vT>Y-U#kIPRFEZvo8S%`hN*CDXBSxfl?sHV)%4?&D z<&w(hJ|--T!G3W+2}2Q{p>!q^C9axdVh;jkp8i>w9Hcs~BwLI#cRIH6lG&UWBgijU zuxaN_Dfn0c>)2=gD5>P?$BpYPC{6PO&}^>4r!l(Z$ZuhK zu7W3(vfWwa_;g2{?->oa13%V_=ib*m4V~b4v*2}_{0%JNw0aeXOBbQMHr{yi-riHs zbH0(Mr?cocRPtlwhudQZu}m_J<&)@hxtCnCDGX4eDo-f3N)|7mu+501%H;Yj!az}%?K7RFbTXGznP-d$X zZ&?ctnh(*40DnCW*N#}OW|odpP#zvJa%p- zlSss&aPpA+=&VEGuVS{DV!;@%nprJt5jz=YkqZ@R8?P0Ej~`92P0g5`PfH7xb zGd3Vvr%|7u{o5%dh{j*j2w^Tz;rrIjBK^18_Bh8GqQP)cIVM|%YtV7m@CjJcBK{A5 zJhiXYmsM(w%7LB5?(QD>?-J7teO~KzSq88FBzscG?l@e8M_23MI~UFI`>Ehf3$y3i z6QFlU&uDR&ugScS446f`Cg9~e5HZ?qD5N0Y>G*-AU+!M+u~Muw`|pTLH{E-+g=`iN z!8J+W`!?Auj#YLQSSctzR;WU+pw&e6 z<(_SIINghXX9xn0Trt-Kvtu?_hK0eEi?-lKZcNoILU0F!E*&{kmO)u1pGS2Y)GRKu z9KJN2x0hVjkM!u}n$+y8(2fZzAeDPJvd;}sz0hKsl^;dylc;A|G|~ z8FV5qIcyGJV7dCt^UR770J=@TE!b3O`yYIw>z1zLG$G+9=Uj@vndtfNbHt8%pX6Vl z?)<~R7?dX71FA{~;RaaI(^`dyPa=s~!WAGR8`M+Lx^8v0zy&lapy$6(6&%UJ;@X-q zyqB+dNEsb(lQ%QvoFvi7PDKl<45_oN}F_{4aQN- zU-E%SFG79YH|vgqhb-#0*}ne_m)AdF{$Ge;N~Vovk=QSvpB5%skGpKDOgnFJXw9ELHBr=s+dJHGH z>H2D3Xen~S(GwVsy%E+CX<)7KaJxW6USwm#qIc>xFFzOM#qOiYr zUndJC?lR_o`wf<5!)8l63=(owW(HlCF@(7_y4Uc$T-OlgeLiot@T6INhO)yl%?7VJ ztXI#qJq^%VsLjQB@EVmTg51m{`&tn67fV5@I`)XxB!E zm#A=##np%wKEwcY>L>m0uW3C0xLBo|gHTfNgMM5N8pdiY?@W{#H;fr9yEHq-NHTQr z!45cH4}uZqhMDdvZ~**Re)kLgn)w}v84KSJuYb=OBbT19$23j}9RlqYx_+n9dhnl&6?slzcXOHb!^bWu}l(wTFlknbam#HVmn7UPIBwB@Ivxn2*HqVZa1oD&Y$GY znZznV*g52u5)ktx!vCE+&R@xVAnZDfIQpw!%1P)$Mx$SOj_J_M^&HIK{Hb@?pOT&1|5*ZR1roxHzMbE?saJ5{jV{f-Lt!DNyr1?E(LQk+q zZn<3hB`}GQ5-WaRZ9sFj#D21Aewj_9FvP1RMp-gH2bkJX|TQ#`NxIR#We{RpIrpMx3+~9JJ7|}2u=6eBe#|M zG{n_}C(CLmYm4*_0Kh}4D7?`teET$uom_xNCdqcr#8Cu#Fe40GmXY~GGpYT zp!Y4zq(YhV71U+7sWLL&i(NyHNn@%w&qhc7iqp`4e3xaWur#YsG&++bAa6))K@+7M zGbOfzchMV-7EWLSfyQVu)E>>b9j0(qE*}4DQjdP2@U9qV)u9V{sb1RIhD%8QId0o3 z1e8q!mZe6^XCqRF1RqcPz1Xk)0R|1D5FJ5mn#)(@7C~aSUSQ~uFVq&EylQ?YN76Q% zLj+V8zJre@h}JfF|4#4hV|_;Ag(=k(p!FWSby@= zPLh_7?=(%?a1@mG8a@O2?Cq>sMlO-nc>|&^eYP)2Ywk?tFoZ$Le{DyDzu==o1+du{ z%k*iZmO;&~#BLP@L_+F{gk1{HIecSVO+}u>=nWq#KC5COS~VS$0Cok%8T}XS5X=>S z)23*j9rg*1y|wL+POHU1?fNXvvh+BLI*C95$^}HS>W&w!fin2GxEc_<8i#;emawP! zURc>Z1Q>E#G!cAi3$9mWY>E2TLqEcb;KE<`)qH{-U4_bJv;at|H3`Dto%Ngy!t3Ya z5J6e4NOWnk`fU!iy@$GoUN%O&6UO272!1aa+oU(o@l28V=~#)d#%KYzR?n>*BZ)YT z_xF6XqXu_KQ=RWXZmKyzq;-1&#C!zbz(8?ThM7D19z0l8BO7EptT;2UivhC}bS(EA zy#;WtAzg%kUiSV6dMLIdbWTWs3%CYxI+RV+MHHBjKx#w8+y+T@SYv&HV24WUX2mNX z0@oIk)tNF6Q!%55OYnuNe+h&FbCZ!quip+8Cb7JN1h5(|cqlqA?FpXH`(O&jfd5dp zpxEj?KcA)k(_|Kn&F`yz)-U!}dHVlRaAYDX@XGWnm=I9IFb8_!lN0 zWF)-rLOnRXB}FY?=o&dUA+}eKl~d+VS!l8ZdnDtLEdDR(_MQBcklUkbY9s6J*R4#B zp!W{365fO^pkT2&rU~{VNIm=~NqHm=DY&+^@!L!dw)Z@3V*OJj=8n&F+SM(hZWP?MJtBjJ3fez zh-`TOghQfPrBs*MtO(2rYdoat^osnplfJmv$4rh^E-8oPECk~ib(gEPQr$qx;F6f%MD4#^Gy`xRITvzm*+0mEg*De9TVF_ z+x1{VL0tTa;y5!=qu;@yg8O;xm~S&iHtIdaMfOhC@*lTzN3^w6?ZB^mU@#qYRLp%@*wc7wQ#syLUE-9>=152>y#;gH_Xx zXZH3JwKX-)4=(=>h~NR{_M&laev{f*jy8PQsu3#I{x^COK=A`?3Yuk&)NWJryWQ#B zY+p@e9mfzT$@E>l;?0c(p^G|yP*9fUyjmc>HBL`#sap} zDayRV4H@CiDdw_N{%ETq6k_du`oQ88nAdvM-W<+PSRYCl_YH3NQQ$}sybCo>89S5;cK9>J{X{(nP z7uC2f+r(W1@|3ysn=2!+u&k%Q{w(IEg8&b(uPt>#PhI&}I=pqI8@swfPEI3L#@u*1 zZipydkq|q&&xNK-lt>wDw~a>SdD)~31`Id*#|gf~h4o&gC&?kx8=nTokLVfvI_~l< zf{&N47X(6N1zoz9KOw9Cpo4xhGc%@+qM^T+a$f_bUS?8`B6`=?-=G>FX=!O~yK}~F zc9CE(_$-6htk)78zjwY7R>@yE0o1g2e2y2Pe1j@tuKl33{P rV#XP?xVIKHC`*0a{y&Ca(+LX8FV6r7gM91+pofa0rb6vo%ZUF0OncLL literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/lengthnearvertex.png b/doc/salome/gui/SMESH/images/lengthnearvertex.png new file mode 100755 index 0000000000000000000000000000000000000000..008dcb16e579e941e8d0edb2aba977fb0dfca862 GIT binary patch literal 11402 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 literal 0 HcmV?d00001 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 index 0000000000000000000000000000000000000000..88db3d6f8e55d903317b34181cc7be19e883f014 GIT binary patch literal 29048 zcmbTc^SgmlAz!2rq8AuwumJ*5ZI z_1*LNdVl_b?+?3ekDcpW=YHaG#W^QdQ(f^n0Sy5L2F7z`r4QN|7?^PMClv1q`k!y# z57RI(USlYKc&`ikcGw}2$THMG=WzQYBB!SVBUUkv=K@3Qi)flBgv7|7DSZjFyg^Iw zR5r8+OWm=wUv-T{?3)}ujuSzBZ_q-6HASaPHdJt$f`)eX4+`aW`PS^>dE>{TDLWyW zg#TY(FuI4sYKciSzp7Y=_fwYv!+X@dv^si5n8<@xvkK!9npB(61@nGdBgbkmF{VwM zFp#U7(;<6hXznQxxA@PBDLcuRE44U3{7(tT^8<=j%TAJn z2Y@z6QNh&5FX*W+>}nSO^$Xd5V`z*18zaOi^sgM(*qw@hv5Lw52h!&MhFblP82&$^ zf!u#Y-2V}iKKyIqDZ8q|1dM-mp86jG{U3k+H7P(yA3bftfVW*6S}5?v*nddeg>z~| zXcF}0JpW@whW!U#`2WC*7XHWT{y$d5!k_;tA>^V+i;13Sr0{=ukNyWD?Eer3OnIRl z0wc?*M9=$i6Z3!Ku>U6xMfD&4B*p*4f!-KZ{5QzLj#(BB@ogtMh-mo0XMWzhVtML( zi>V(sQ`b^eXHypz4vLgh$(8+Y&NXf=FM0=DM^-;>GG1+IpUYds^iLm$^qGcr? zPg6rdQuhzh3;HCrOQ@yfGd^}%EtpN0B7F1QvFXk^@Y!GSW^`19W<0z%@gU8)x>U;o z&fFcY{`$NL&E#@rebNuOzKmJorBCve`GA%%U6{EOb;)QzXdxa^k~~J%T0vTJjp7Ej zc7fQV*VC< zFDS^}1agMG^T#KW%ry6|DHWdTRb-+)e}cL@w2i}zDHMs5YyQ=Vp`RcrBK`Bi~qN%mv2O3r-t$;;~^vTg7a(Nnd1GL-WA>SqoS z^9CMcTGz0|DjHDZ{Oqt1XGquR>KUI5Lmq^%mCviDpu_vNBc{~s*Xu8~hl(j&PKj&B zA%mMb3c=TY+3q3N;sJKOf9sQWJ1v~BmKq?a;eT+VK~m*=cJ>3$M^>?bvEPK=MIBV< zJOUTKKWmY)LZsSptklRnBx)?f(4*~YZYqAr-VaJqhOqfcNK0>4tZD_7AYQJ<`F8h( zdJpcKUBfFTC=oCnh%_C`+^e?ZJk8fgL+Dm9BSn{X-83?CrvT()jD-#CGm|coG+ z=0CynRzd{lOMuFf`0P2DYW`k3WQMh2rd!rsIc= zlK{*zMe}cN%DK3+Ybk0Ia;H?;!bz(P5jxcai&*TnK-{m;x9*XH#w3+Gp5PMyvacE|*v5cRlC>CeI&h5QGVlT;EWoXa=v zvQ-F=PD7J-q#Keb*aom|gWmElpGCy_C(r5WO5L~{UyV`(~p>&h=#*))t?g|vFNb(A7= zB3|F)kY6jznFta6n4C~)G3bQ!ae2N8XZX%8>n);BO^n!pBp2upVB?-N&JR;hZl@Lb z7ilrFOxeGtIZ%NZac<%ir8Vnw_%~c(Y7e<%v45b2zbSJi{pu{Vy-ZjIC7$$B>o!P| z+g{|J96Z^smN?-S`#z!b>pjWV!xPtdr+|gd#TUVh;a6FTZ9>x{s=?4x^m1rp7HucX zntRfDA1O+!FG3u%MnuD8E=N$yvGz}8rSW4+SSV#EUhnoe#l zWc8{J=Ly{o`#+dMge9#qKpkvQw#sM+9x@0aeg=6tS=l`b)-8`4?wa}L^`n*OwEdu} z8(U||(*B*=>_rhVmn7w53eE+*wCwidX5cJz!E>llp&Ka4s}&Vpk|u zP+Xp(f>(LlDC&o;g{&PuZ~DE;qIp2R{mUZ*ZA*cPh0sqZ&uaYpizbM2ZRZgzce=C&$iV`Y8)wo$%h!12Ml#;(4R z5Wl^@ewX!}NEKs-`Jc_Ehl-Yob%wiLoN{7E^sVm{K4?DYc||HNoexRc(@vkCV%T>j z4pa&JSibjR@9GDA$iR413uUl#=Pwnq(*zg>)42~RCfTua?a?zw4eru^xY%4;mTzf7ytc1zimmKOK!jH4}NM_n6=_J8!{FTTHBam%m@zl_WV%H!#YI^yyL^&PyE(?O>DP zj>iuXsZX^3DaS*dnm5FX_C32aST~P}9Ee2{Lnf5SDYM9~{MU)^Mf53XstCPysu4#P z?I#&Fy;HY}v@RSwm#I^Cy5Eap*SYSX^TAVFF|T_ZaFF2G>?0U6P9^kSiB}{M{<1*@ zqm-Van&p{dF5z4wrDmn;yFR6TI~$Nt&g4vSRdz)t*oJeR%A`@C%U>6Tq(QNi6DEIv zB+r}->*q%tO@sp$9Y4`}^Ky{0s1zt=r)yRmB55|IM%>D>e&yuT>ONF)IyxAfFeDj1 zTPN|v7OwAM&51VN#;-ja<}sEbmKM|Rn8f@9#HProd!~+`H_SnA)y(BzzNEt06)xqM zIihf#;2_aprL9#yJBr%i5Q|c&F+2;TXzmd3G}~y#py!I_1F1>-QkEoAnzgAV7InD( z-gq^8GDT|dNZ&J)jpKvKc{rHZ&nES*?>f+>`^MrVneB9AUms~9F107?GNCqrO7^A~ zQ%)&XE*RbUR&SH00D_Gg%H`7<7RR&ES!qKXRWeN5#|y_Y^TUMVa|~@M9Hwl^!x@u` z^L62$`|CW_oyQDh2&B37BTqOsvZT|7d4k|lL&G9<3gH4T&cAU5WM{J-$=TjXW!%a) z19thWe?F04Pe1wyXslHY%b1ca5GQA>uOW zg;>ZpQF3k7BE#2}&s7vvwv7fjZA@lklT5c~5|ferpB0bF4?tID)`4ZqhK7GKU>lf8 zpPi{-J^1dL8b%GPivn(uBAPp&B7hPU@?-Jym9@Q<{ii{j=yb>8~mnThqOQBWO zG*;iyNUX6*ed1nRLHM01mm_jb^Uhw0Z8_M~!G>5?o%)%5(OpWa+9bG?(8`DmXlT@J zcV7~bN$LFNrc|2`t1(3nmg$AWl#pn^s~ofX`&O5J&Ai-hWI*e8^$>K*Lg9?d&~HY! z2QTKi^eA_H;1cGFpmdDxa`;{9TMh;lawwL&!FKWQ_xhRb;a9RQDbU=3WkDB5VAIdh zIZx5@8RjHazxoPV*`tzq6?~#8cVED3eJATQ3*b@Jr2hed=lzgCJ4{|+W{WP~IKGr% zc@uajI3IT2vB|77OQ@RgptmdZHuI6xK;AjISg!%T&Y%BM1CqnzxMIw6;IF_{tTk}J z(RK@fi8YtNsEnd*16P(?XJ2t`>2-rs`^>y-U-Gf;NbI0r*tyP;EBsC4$pwmczI;Kz7s#Ujtl?;hO;Aa z^XG0bbcyD4f&2W76)1Vdx61N%6-74D3)VLZPkP{5UXGNF{ET^etO|zBMOgX^4MZFO z`i$y29EGi20Th(f>Q@$-J>@GW^+caJaw3p2oJ!Ge0D4*N_dDjlU}924y8vDDJd-Rq}Ly z!UG$R?`zK)e3PL7n=s1br%IS!38Ip%hJ^}OO>=H4WVRE|u4T>Et3^g?#^5Z-VqUs& zD!j^cT#D$7fT%KPKV@BS#b7JnT@vi;8JR=UcN1i8hJKkNeMK~0C0B&qp+Fn)hPW+T zW?Evu(@lTr-QSnJiOG{3tjA3mJxcQ1?^ytZc%PTKU@TgUxvHKUWK#-lng}(9`TV$<` zhDu}bRH7*F75UndOGNZdDh88JYDtYz{ta{qn{wH(^qyAdpXd4x0Y}F~L@e(tRh%hd z^iZBAb;$C&$iRMX7d1MS9gzExCJAhw)0cEXX!`F{SDhUmPW+2F5%-ou6x^sRzgF;% zxr37+;xf#a88CfPuK73u!x<0NSM3^7EF z@~N?A(Moyi%?3*YiSP8cUy0S>rH;*kOYP2PkGQR0mN*aH`E0{wcKbVptviDqyAkU| z9u~kMHp+=xTh~4n!ERuA^lq{*r4XZu42W{&*TrV?Y_oY#uw=XL^7HahZMw{CIf{c6 z;^ITzRzk3y8uNu$0CB*TKRLc;phDzHg*N{v#p)F-?y1KhP0+hX9ke+)ijbz|451ww+Z2b8( zYKC-kSY0u5{Dn!33296p_6Nl{?vk?R2~T~KkBn+x1Zr_#6nfTr*w&wLN|S0+fLMVU z?<^dA^&~|-H4-*AlZ#~1Xg_M?KpX9B8lhm{_#)lEY;swecc9;QIldbG@4R15TiCb< zrC2rN?0atbK{*wQ3CM%{aQz{UGEN?!8fwRkuME@);Gx#eOrkLLqrcZ$t<>MFJZw)p zZn1!`(x#_Wj##Z6e|(ZNWe-=Qu=p-+k;dT7!iO*>j1Qq_$T_j}(#8RryixpMg>$Z0 zXI@s@cFtDQG@>B)@m1oBF((p#w3-X3Vr_C}?S9pNC|>QJM$gNxr&i-=ZtE(SS1{1MeN#P&BmevQ@qCq`JPVh_6dC27Wb+T1Z|Z~qn-lX>z29G*k0(ARw$A45q*E{1ruZSjhf(N zNE04n=G`0!-(&{4Q*bcu+t2o6^y-kAkQ_HyzLb8dpGBEg<501CoGHmJFqO6R)+9gu zyI11sFF?0tT9WI)4GhFvF78lVk@-HP&h<67*oB=jv8=Wlt%F1hMS-O9*c;Wf8*;?x zwU#%J)<%Eabz&!Z?$d^fc?XM4{xd`QK5)WW5dmXEFCc}ydJs&>IaE@;4eeBRF@NCb zY=shc8&4?=Z4OjU!Kmm8T+^f{!_M(h9|Y?oHIy@n1cs+LJ-zX!4oPbpS1NjENTZe4 z$5VDyd^4Qr^vjGHPG=U%enXugRgKldh~5CL{m`XqAKUcmshEgO`P~8ji6bR=AK-n_ zdwtT_w}&u)0ZBsrWwMY`+$dxq91t>9#pyQ6X#nTOt<|kw{Jj_MJz0|p@n@|uI6H?K zyh&LZ1&>rbDHFT(d+GCWEHGqh^zsX3^e~22c~=f)W;I)d0YwEQF(e?t!Nd?J1RoP&P=S;c{CCyaDL{KzKeP?8m1&$SEpX6 zp9gYBaPsstknbiwx#A0A3b~hN?Hk)Z>$y7N>?EQI*>GC2=5j*B$n7xL>XMEl&He8_HnZut5YRr*^06= zc_^{G?qTi7)q%k{DhtVmjedcTpr(oxp{1**;qpEFK~jiAzABiNdG-qT^Xxy?ET39R z>)-Z2T&+&ms_B1!;>rQgDh56jayxGHy-|_?GqPM@Cg*>s`qe?)xo>Y+r=ExO3xdj= zM!_FasS+Fl#=u1z-~4)u>~fd#U*OVMQMFL$j#|CK>4j^3=pB>`*6qmwuoz1EHgl#D zzPbe@%HXJno~Pz#I_ezchOV0=)}; z1rO=@)|h=48y{tVUz}LkpWOoxpDWd997in+>UoY=+Elqlv@}*exOK^+KBTi9tuQ?s zB<#e>#9{HhF|V548i!TkBM0ku?pbt)^5i9lz7~l?1!u4lc4=mxf2nxV>8k9pyKehk z)zL$DDbEh5t)$ITy(`Yn*I4t7Z^&|VaU>o;fp0GbVlqXYoC~RI{N-YnGkK|mJ zK9K1Aa^U|AUMxREOhY=kbRS0GaWD zw*2r{-gEM{g|=72%zpKU8|6ES4UjcGI1IF$_tT)!%GetaItcc@nAt=0#J$5=5k!vC z>*9Vj0*m|pb#Qu%PBO#K?fY0-+GmWEss!uiw0~sxJDb-~B!0IaxDf#{*Qj)#F!E}! zE3Qnpb(fn?>8msRP;agFTldyyPkQ0bwx6Yb^v0zU#Ggld=$}H##WoanlCm*$wo#2CcAHv=R2kdA4=ME;q?%cdEsX zE^&xe#|o>cJ5UE#cwzOmB?RqbE*QRkBo2S(h>PGNDU0#~@@>Y$cz;x!FXjTaS};_w z>`)*e?n#hXUk9&0NtG*5Z5r9k>)1oF4s-b>Mw#~}j8fm2knJI=&W9bBs$a+DjHMAj z*TmB28*iU43{p4LzwjxunS#1W5!1LYbF*2^(W$C%a#v^};`Fc0s$Iam0$a^!bA2a1 z5Kxgw@OazP^UDVB__BNUh(I0Rvh;%k>4(w}pN>As`ISNN+!?|E*f(2@tDlqKK=O?5 zclhD9GWsVQ?inPqx95kym_8*}8#FI~v%)AFwSN9>9?^t)IpP!j;`+opH#6Py^6R=u zSat9GhFTE?)>hXR7&OX-~Uu{q?LljVdSH&Y_m4dxY*N4OO zCHbuTQ9Mh$?_Xc)R=mI4dK;{{xnX_N|5!LlB~6g!9zKz4$`8Kxbfk0nE=Dxdme($I zYscauVT8W+AW*&z%ULfMFg1$krAMbgKQ+1@l-V2Mi|=^FcR48p@0Dtds!!#N zsW;JWa)(b+7Evm$x#i8jXe%;~-ppyAzZd^#1AIC_FdoS)kDoYzh4MEc=dQ@Nc%LD} zah1%IBHwHIBdNC4CErhqH73u5_ZJNNEC`#A9-b=t?OKVRu;Am$CPKWCV&=lmgL*UM zM|0*!^3wTES(XJ$A6!@OqMLrZbfSTTPlB|e{Fe1>AjN|-s_equw5?&2PBqNhF#YDr zIGVI63l=AUbk?ivWP-|kb^L~RDwzr|H(dB*=<;+6&g1o#i8q1)j;5l&bf-uO(bWjN zO2q!&Xkv1jgG3^uA-+4s_%PF_%_LvnYNs=W)l2g9&y==ssdMS^ewfvBq}Y@C?^_pS z<(OYt1#jf_ap}UQF}K(uXM5WxD%#}I@`n{M>Mc>CcdkDuA5P&B9YEeNhRV9^NG4N? zt6>WU%U~kwH4}KCb@G8@io|Ym8WNgB-(l{ahJA(;{Tq`{n)9+$gkEL@+e{{{k2Eoa zUdb0aPQW)XCf~GUW{~Acsr}tv_1Eq*>cIck3-Hp-$vq@)5ZGAiX7Tv91S7`K)iD51 z@3JPyJ;;s5f)J6}&E)~0l;7R_<757MCLUAQ%p4w)x|#}1BHdC<7Bz`$wio{~to)w; zRR}c&e|MngRCAK@I2aZA4C#e(*wRUjSBC4cjezj+x%>n~4$`IJ{ z0G8CwHZ1QPfuo+3Oayn!&*$DIyomJqS%Mz}wYh&yrVxLoT7{Ik{Y2pAI$RrKG-nk= z4U5vvqnN!v|Hv}PgUAc8T*Ir-Vt&Iu@RjIX5&o6FIJl-m(((G;yu*)XTWhrwlewFO z{?yI>_vLIZfI6ENNSRpN5O}U7gB<0h8+q}C($*os@@1!sqn0;TPx3SZALg3)o9v!n zui&lPBn@xFVBqM%+H!cnc(Nk%motl2yJ*wDqV%!)n-!Wm@OV?e&djH#5QTyD51bz! z$=@Fokv0HuZ=SgXL@wsPVUAKVc-be-)3f&X*VjB2aNVxn9;AssN>XNO<#5f!B6&%D z9b%%4kOgTy`$Oe-20Q+>rM(3HgY}ktG7BbO)*gWWovNIG6od#jnOxsRB93!c!nV9 zRHcBM8Ad=5Oxmtz4z~K`cPNfYCj}yTH~qE;_@U=3jVCmUL+`MR>!gYJcmWf;f(K_M zPrM9*C~n`vi~?#)hmW0;Ic02l&OOV}MHbT7(n3Jgj8g8JT>@Xydgafs`Q)WUJuh22 zC;DXLKU?D?cKbj6_E-O0>$mXXrUB>@=jtvwTR3u%5N{w-B1Nq?&8T<<(isL+SVfnp zSPo>Y8=!_ut5xojlKuL@Nk3Z9TV9KK5E(GCk_fJA?$>HXYoI^G3=#MB-fO&RkTov}3^M=Q=z<%W_|OT8@MGGgyYGaR5 zyWCB?1Xjw1{q?`qt~`on26(KL$zRNqkVZ9AM#1;fbvbFDWYL+3+P^nIwAI2 zAD55`THZD_998gi3Hmh`Seh=K!XugfcFM1^NoUokIK%?U=j>C5Ao!EllSbAWrv7pc z%>4zcY&&{q*2pO%9S3=u~@F@6p+t%-H+}NVh5gARnU9lQlIi5-C zI1C=FNqaQ_Zo$9v~IMwYtT7vLEaoqwc!$bB0g_K#y9YQ z*QgAv^onm@GLn_W+u4TK`543^0`JBsnlp%PqBmdk$fdny*bJFKknAQ#NW@ObSL2A_ zgDc0Ms=m`F?=a+lJz+Q2{`ni#+H5Nh9}^%bzM@jiy6#00z^=?y`%Yn8smdpA?HBmz ztHGKH&0a9y(@Yxr94&htkBhiCW4B`Q4FKvv zaZ4}gL>X0o7UVPwK7pQ*%E`Rj6d}5+UCL=SZAwx_k?5$? z)NuU9WsE`=Sn5<-btc{S$QAmLhn;Z&y&{@A>Bh({y8=_3iOh@zUU?F&-ke{mt^#T!Hi|2hWFpfg=qi2u?^ ztZ0)D?%~?1R^1_oI;SHI1y;rTmMgZ#;b$9%3xvQ=;~AA8cc+dF%IT{lJs$&>YO#mT z^!?GA(L{!jG4MVrsp_5ea8#Qqjc=&NdLgT1^m#Id^mc*!Q(#P`fa>$%L}P+h`Ell{ zq=T`OmEXGurDZ$4O!@dBv~yzbpELT~C;Qn0cTD9|6k{GHNy|Nl^j&s-f7ID&@8aAd z1a9=_o}`dB&fv0IMRf3Q)u=R(*`+6h5Z8{Re|9aWeG4~p=CNlnqiT=-B|JASpi+ecc#kak$3s$rX z@8CUhemqW<4Fb0}QQAq@oEb2Td53lo)3~ZbI~j1s(+RTnyv2Jx9ko%6WZA!oqY?MyCu zH6TFG4X~9ZcbldD&2Knc`->*ME@V>K-q#Qw1o)&TA z{phd837>B{|ItFBDYA?Ry9U|J4d5}j@(?poc+>rH8U-;l$aPh(G(h6%e<%~!h8hvJ z`|M2iKBOu$dd!MELB=bp0C;aiFRu9{^K8Uh2(X~LauIK7+%t56cTB0A6=dyRW;##U zJu0Jd>TR#JUc*jqVi%8$4Vy4)y=tw80;l8DGEr5{8K!K%JTIYwpT{g4g;EQhN5?}? z2&%=TEzbt?5}Iq}yTSI3)b0)bcbT7fmzskXWyH(#!xCQLy2d@z>n+_0GjPR)U3Pgv%O@P`|NS8HCk<=q@suT@Ha&A zSa(=Svfrq_lT|1EyUxkRn@M=#3Fm2%OHFCI6OSruCh-mcwK3^{vKsHKik&oa(9g0R zvpjOLaEujK`?h^TCbzAjgq1xgDXg`g^v{}uNm8^j;H4&cX5I^y*!Sub+!X>sQkzjF za=@r8<_wD;pNHO_`;F~83OuJYX`0u5j66B5R=`#N415Zsy3!p6ci5c;@uo_g&1i@w zT_YMkdz4o?PxKGM2F&5E7Uie2%5FX@1PK_HofdzZDSpu~ge|%q1n~ z6Jw0&(yIjMBaSfN#W(>HgWIjL6`~8Hip;#>)j=8^Z~_B8m2*DZOph_o8SPxH?P%$y zNYOkx9VvZ=huETU|6J`ZIC?&JtXcen(Xz&`ovy9>KE7@Ax$eb8x8O+07e0rnqORXg zAUXZ3qU$*j4R*=x6L%}93>k5#J17{y0-#q4 zT6#F(@_tN%cJ81%D4+TpwE|9GE*bE&{veUZH`@}JDeMR3TMX#M+ns;o(~(12RF`UX zv^yAaLU6<_wb@(;nK3gc1LvDSAX}a-b{;Qt71<3o5r9reyys7e5j!=x!sb_xRIakY zPiR6EX(Sy7xW3yY%chz@5->#9FtyWpDn{AgX@s;p2jcUTMYn6_JE-^j!-g5!hSX!3 zGEQD&vCXi&KB|h;w>*pE`(kIh-oJ7bKR`<3xz-F-$l@F#;A?EqkteTdSupyP?LRvE zqFRkN65}^=%$29x^=M}Ayt*G5l{Y}Ub_K5v`Wt#Y!mD}WhgY-s@k=G@b&a^CD#}sU ztWfszMK!^7EDRnxdY^ktz`QG z>pYK&!N;<`cRwY9!*KTM#ryC6DVp5DVTe49*AoQCHF8W16iBke;>_v#1HtYV|nbOW-;ouBqT$We>-oeo)N1Z=N1!DeGLak}!^t3c=0! z0F;fhs1C&GPe_&6M-&yZai+1&^u=jZ_|<D7~oHogN@O$L<#C*b4;lLzh&g$yMbgi>d2hoeb!mEADh}$N<6B*xT<98eF5Re^;Py8NULP|Jc4i=mU4CL5a4+U8J`9 zyDLBnEDKmW>G~;j)ycL$VOPWAjs3_Wy#jRZc*J=#WdFdf5&zWk+JsWm8pBt(CLU?f zXR7Uut^3Y}$_GR^Y8|q@hH>$`FzK`u<*V(-yR0PV_f4me$g-3s&Fqy7P4(sx*|5AX zn@a!>9}wSiSFa!J9D0qY=7Nb`d``Yr*%59<_t%I$@WH`4JH{^O@usV<^pb1HYVe`iqjd1Z?%8!<^XfxX7ijA` zkiKj4I1{n@;DZ~#xeUFX-AD#O+$kk-jW@~5UU(J5Xzq?zPgcQ~Bx)yQUU2s#Yh8;b zlnITeOJp*9-xaJL?G)C{X)S?}!UC1dT;?IE8Is;h^dvZ_}s7U;4Ynsvh)ldOM6!hcdDU zT8B$Z@P2tXkI6}!Ul$B$ydhNJ|Lq1vnx$8mXH*>GJBkQu_p!$;CmhNhLG2lN&d~z6dc_hFL2|Dqe ze7vB-h%194`Q2tGoUq0Gl-p!=j~gpFZPOZSa!^e{n{!m_g77hqpQrPCTW6kL#p_9+ zH%&ll`xp&OD3|q$el~+b&kX*3W*P0*h}LPuMn3AnBc$XL?=bM23s1L3kcp_dwPW)5 zfOgZ=0qie=spaB|EGvT`G)etS35D_9{U}wKx7uZwRz?2A?#pT0EDhl&0%>{41{NtA zmQC?W7^dQNT^Gq*v9B*umR1<-2di7Qb_4S^srOV1(y0&oJ+KHjp?adP?eH6gH~Z(( zZYx_TNMy-4UgBsXjmiK<5zLpx(8i#9ymd$&q>ostVQwG&p2`@XomI00j0~I=*5Gbx zSdw{^-SPJUBuLi6LPT$qo<<`rFz2yuwS;~NeaiP3aK&sjPrEi6m!bw?A5Fxb*UX??|E_Mi*8_V5I4Gs(oE?;n%6u&m+x zYQSjQ@>b!@h1f&+A~5ms0ah^E`Fq%%*+e{YeoI@A{44tM`Z$Gd=E#WF9y(0mUoq2~ zyg6H69qY`x=WBdyc%ywNQZ9aoC~Lq;$F!n_TP{;zmNT~2j@v(UcYuc?YxMWuAFw0! zr6mHh0)Qu$8~MN?H9yo!>L7Sw)l`4!v+4WJ&IKDA4Ifn zN=G&&W%_4kz9{}uvT#%;xnr=@1Ask!4)6IcU1vKcx(kR2^I=_-{O4RM8Q-vAC1##G_2S zqC^0fzGCy>Z4cUxIDe+GUj7>{^yIVUUzx1?r;U%R2hj^5CLZ@MOn3nNzj_wVNzQzT znR-~rA1z}|%THPcGNYZt-h7D)vnmuO;PXFB@(2yPVXah;gJ2$3-y75%Yi8e$u_KRh$mDBMsPndZpeBpqqFwmpoRR9bQ@k-@JCm^E z0Gs8=xsv|#Nb$U*Q=HM)4EWl`52*`}BDZF*wVl&{y0p4~D=gx`;u-ckdI9ul<%YSr zKj^i2q=zzx&(C!t{Q&Gq5}Bt(6sZ!SOL1dZekkDr$)!OID^6yXnyvmONY&|vri|DA zJNKntj}W(_;Vn6W(~1)nq+#UHwtz&iW2m0ik%rOPi)F)nol;{$2T9;WuA_PT!&^_& zqlU+uYE<~gCwGE)h!BBW4V%a1gOKBp>s{Jff5&HE@I31+^0ZW+O5MuXj?9?zr8_Xk zHrwO3^{jFNzpwxg?yI#y35XoZ)s)c95eK*Zaqyp9(;aB~;4kIjv1KS^)Q^nC-Xm32 z;NddMBz~^c)X`(%Mldq7Y+d)%((p)Q_POR!A8qxuP~%m`bd=DI&kDGDejG7Tv^5M* z#GX&PfBbwQGx{L$7GbPVvE2J-YA|mBkjEK{$<%ch&uzmUc{oUF%Yp^70}IRU3aH#y zt2ZV0TKwHxB)(kob1!e!$W#Do?0=!$&Hf{gv_pCABLp_2g!pRIc)`XaTv;Zkg>1Nm zhhHgE7wO@Tfu1Z2fsRwnHbdL;8|QV`K)kPRA42e+$?psutd2cArNX3u-3cGXR9Wh$ zb68_~=<3=L8tS6ZC0msZzDBNffd+J}6iB|>$hR(;TbbvA0*HZD!9>j&b(29;slS|e zO{xGX+lZp-$n4{L*38=$bP_}xciprdQa7fbajP13Lf;H2MhQmonsNnqvD>U& zY0?Y%ezU?&q?B!bo&SRt2KkT~nS4SZ0=I(Pm$9abK+Cq&31~f7DeYeZ-4%wbBW;_J zM#KI_PjjP(-HK$nxYT%sByi3WYLxgTt`XX!bTt}Sj1u#0I@gz4&)aq$GCCBQF;aAT zY)m`kx7m<3c@oyNeslFCS&ObdHx%{05XGHK4o)uPm7`|aV>I;PH z*a1xpB5G?(BS*O^yam>F!W@limHus%nNev>%`r*j6q!O690D(NBK(%MG`JG$cKRWR zl$HUMMm(qG(MEc`{;M_NB=?ecyUnKq9lqgmSxoe7+J_%&_5{<$dA)j<%zPR#jxwCA zc*5r!5rZxtE0ept`C~e^`p*pGzYjueMq76Jz1d&1(~*GP=u3btDOxzj`XGLfO0kD* zt;pGnsuU;SUu@fu{QbFEDtROC9Xh@GS*n_Iqn!X8K6P}@$mVx_Olcv?ZSq`#5xHJBxDlJQ8OJ{KBRbq3YCGkmDXc zfT53weTTc+Bz}sEJ>gn z30}$T_~rxVh+2|9BM=-V*LFd{8R3=EkhApwl8~)fu9rj91$$*2f)_msMLut9iEZ zCdTw^BhaxNgj#-oz`>WH64VVAw6z+5#Z~t&Jt%>oW6azAo*9I|Kqrsu0a(_+YM7nz zs!<)ljz>Q+#G;IPB4DxWQW)>)SZe?{xwo(^h+Y!&9Sd?CP+GpkMR@Wgmt%@GBD3Kk zf~7}VN41q4+QTbakt#9r+J{h1q!VLMv+%^S|J?v1B2=2uU<|*OxG!+wnvj6Vls5?6~%DCH)y=vcZu-Q zsCEfs&bS9#{wI>p(LlNZQ!-_&<}&`g;7?7;`x=3mqn=B0&a3$ci%Rk>RaUPoL6~kz zUkeo1g>RelXr-y0d-pQ2>-8@-qFs0>A}B9Yts-=$^s-EfyO!{4sTE^Ur31zzq8*U0 zCyO6(;buk=bj+U9Ehfcx$@qc6HCw(KS$*3ru z{u3zeI)bMgE2Nt>^9l>oU5_D;b;>6VX;dQ-!S z3RCV@PnoQnpHV@0gLe{n2;=(I^ah!A1B1VD-hXLD1wYXrTzb`1p z5uMv;iRO$6DoClai=3I5Vi*H&BD9~@2e^v0WUywIHA}d=z4I+Vn%UGwfALvXff-Op z#UAxFq*M|05c0o8m%k&G(*J3Rxu^Dx_qnrwhNAgxG8FKMu=BWd)oi8dMtzWDJ-B9% zj&2apHOlOFnd&V$Hn{2#yC_{l8ZoC4m|3LMi;{c_yUM|SPgo#{&dTw^cs-e#Ggy4} zdce_ky zsayDbK8bw~if)TMNGifvQQzaPTTh@Dvb!Qbxo@EC31BXbxNY6Dx%z(lwiM$R_WTf7 zoi37~qOIHU?aW2b>acr^G;4QM`Y>N>n6M-8S^6hxAZV6i9Sg`kd$F7cz^;cs=l1xH zDkkRxmcKF1F)??XI!dPXbJr?HCZV&tFP38q$#oydfd`-sOJd+%k6hW_+wVU`jBzM5 zau-@hsQdzr-?yAyr`9*Xtx(eF*io;!nZvBvnS*1!D!}+n zv+_en)=U+?DTZTyLd&TI{xQ9tgAH5^Me$OGi>KjbKV&v@qMGchLQyV6n=8HX7{}kf zksR$*nBA>xLo43P0(4t=UOLZR8&k^pMdeYNeQ|ejGX$*zpxlWm5*=g7#`f||pea2- z%9tE7Jx)<8E@kP6xp%ko8o?ByPp?9*K89L(46At;^kmJakx-x{7~`&b9VmM=^Q-;`g#hJT(l%mlN;4n-7MI22~{#IJWs7at7k5$@GS|?r9$0 zbE$-Cl5wjM&J>@r+*d1pALuowJL{=*GmJrOC&|$gyllc#1qNF8bJNdeR=!bnNvMNp z)|!0Dp+2*md(3Ulfax+{d;mA6`x|{L@YPhlu=Dxw3XC+0;1bXkj^sFn6r~Nz?1*}g z^-BsR)~*5gZ+BMzrfM*BjpLoXM@PeZ9{_^~znoa@asB`61&9ofr9NX`fW=G$bkJ=b@ zDzw>k-m_0|OhmvD(=`8{L{9Z6BlPt;Hrxl{oIuZSTnm-$tYwcDSc9knG>TA@*#KN$ zbs=AyT8u zlW_Jxy+07N5viG-wuBf(y3q-&wm}4-5eo|eg{eAm3sbC_MdFS2S$Pe6>ZY79 zoYUAH;a$@b9^v*|^D4bf&#yW?y{#3E2U(0()pX1m#~tV62U1y(E^=clk6jYJ=B&`7 zp1}bOsSHZ9k-*yResAJ-g>}d%80#$P86SN$UpIL3Y7Ul_b^QL-h?=*}_LY_6UxRq} zj05lZ-ll=^WU?Ig@$vt!u&<1YqYJjhgCw|na33JSHCS*T2p-(s26wmM?hs&b*C4^& z9fC{n!JRkx?py2ryuW7ktX^HGyX&0ZRcBXix348WQq7ze9)LYg`79?Q@MDAj575Cihm%QzF z!f5qp@A~w$pWRgpif?fH&Q6VbKq7HP`oJ;w$eW;ZPpQV(7S`s3tB?CRN&^kVeZm;Z zvcJ}}(W9BT06%RR<<4|Bw4Jtq7e>l9aZM={9b0^jLiNZ8jx0}Ee~1US;s36&bTe_? z*%8}n@AyP#Fm#^pPOVnAug??TInVD{0r%a%2MOiQQBcF?o}5b8#2T?`F{oG$;n$d=d~jumB*{}F zisk#i3lt}Ob}(+x`3(pa_=k@a!GTxI_WJ0uA~O^`b4_rz%P}+7&53(kM;*Ej~Ew zy;o?c5<+O0_41v&)zunS96^AD70=eu7D@?`#MEclO(XWZg@`QPZVSEySDoiN=KuD~ z%6{=7+5y;fJ`EL~Nlr53Jy5;kM)Ofe+bkaCT)}JDhh?@hot#1z$I>*d&MeKo%YTPe zSxRpDw7fyQruCbVV;j@ZBY&LvTlRt#C*r=2z~|d(!bHra#DjhgRVq8yB`XvFxe!fe zo+*@e1ASZ;02%Ppj6?*8tOqJxNcbLz$-~gwSapkOsr)36hHqPSfFT17Pxxwc0}1FK_!0=z7%=`cZ$l@PKx9*%%|geL zZ5!H|#I*L+HYf6A!G$(T{S~ccjqCJ2vo=nqz0j+pwM;8(Y+Q3rFN9M!;S`)2Z|RY- zGmy`hJLzeDrArwJuPVBIW)*QCz5vXh>&2VsG5uJrR4M19X7waUaODhz^??K!jf#9a zHmHCD)o^(lucP~!NREKVN=s|PT1OvJC0i#HXfKApT6JEM(7ku2P#4oAqjDGeg`M20 z5BB>7Iqkp_Pdne2Y8bu1OH{2~wJNJ|B~1vZs*Oj<;3M-1$mDzK@*k3l7!RS5-d)AX zN(mV6nP$iFX>D3}@Y+=pfkEP$%)+j*K52o(I9lFFcJT~_G$`gc@ymdEBy9QfeH$B{ z`@$H(5z<^oOH~?P`nk=Acx;of%2w7)1!;iF&bhAJreDdpSM-6P{=B9uT#|;@Z(wGw ze#p}a*rM&0112vmOes2M2c!QhdqWVXt6q4!6Tz-KU>mbq_Dr4IKt#A{w=U09+foL1 zzrXNcegPYrAHF~ZA~wB#KlXGgLEOR%S{k@F&-_~3ICTgYUZe}sQ3xpmIetn zELMHV*nqY2{z1(s9N|c07w{sm&$KqqfP6c)^&owmr)=28nIWzj#kaXeXz4{~R3(Yw zPrvNeo^HIB)4}5cl^oZ?7|&KySV!8L*7Sb6&@^U9#_CGea*I&k2biZHwgsswA9n2X zkIoLeq7N*6JwHLgg)wnK*J^)ffY_0(s%u4V`uH(PUC~tHi*&8GoZm5&#d3vbwXW?% zj|_0r>XQ|#zSx_9MhYCV4g3AjXoQNEEf8dD{qc5$E|uk`-i2FgK@g$&YK|V?FUvsp zL4s`e-W=;E*7P56#e*`yHJ7p3_Opl&>Dh&byxhE9Q(RR1;clT>NSLh*&FjkV=LLqfh`jPLF?wqD>GqtYk}c+6aYb7SLGq)s zPZzvZkt1_U81C&P9Oyx&CQ`SBo6)jI$2NChQev>SDHPT9l)fF6-7O5+eo75F&!1O` z9E)Q7%Z{?Q{8op5m}o<;WxeT6(8S!Qw%KnXGQQ7~L!z^DkCrG$792*GS`H-u%how` zD>ZP^4(HKV4*I~wGhAq= z-)+d-9!$fW&Uiy}X++wa@sOYrG7(d+Hu;JTU}OE=$gEoR!K{T;F_k~tA*B6*YgTEu zH~*Q12Crmp)sR)m048o1Y{q@Nlvv%^MuyYB=igAB&eM#O=t{2C6MK*h5P1HBGtL;T zCNgY_m0s;(hxZ^i?ycDpXN(j0P<6Qt+;5Nj=(IY`Kaks;(jB#KBW2ew%{)AFvZS58 zoIxO0xu>Yl@`O)RRpv_GLQ^l7^YWs}yP$57bh6sv6*WiD{o)FZil3frE+>OV5g+p^9k&yS6|l`YC(&fe>H|f2r8o-aSMJ1%+6e}naFNeS_=v| z%81B%nd>f*cA8?J$XgpeCV*`0=C9Sys(Dr^?nFE}OvcO|Dd@OlwJSnbP`LV3ykNOPXIlHOn2% zJ3QU1IwWtLx*~_0RNyk~{5E*L(WDp-8^WYcS?nR8lzRKvT&WE$!rht*KbTqHx&J}H z8{0wZ%un!@(Uw&_2|afOyDD-qZih&Z-^JUF#*TGc-$RKC5PP7pWs%QC0?ephlJQn0 z`pxBATudTSGO=f$I%mC&US*Y2PW-yM_%_HA+ebueBmVmMOhwD#3GxxY)kdg&%ED1y z4h6a&$GK_IJgBhKp#aQ80M0tQ8j|ZU!x^kgQP%n=<8&2s)tB44T(=w@B7@93`%JC2 zYcLki)kfpS7D^q?_S;oWS0pAWKtKw)k-k#jK7QS?U0Q$g4G^z*fXL$11lF3{vt zW2@)~f*G4m)OYqhApsLz@2XawuWccORk9<< z#D7EXVHS2+Dn&qy_TTGag7eO+Q?`tV-E(DqARb)lUa^WO*tW+MA?RG6P2mEe@Se2K zPQL;8@$7+K^kQiAZ_erfJ3tW1?zamObul*#hQuuZc@|gh>zf)$Lp;d%NU9yw+g|UV z@ZS@g)BGmNJ9HO}IslI=<-*2ogNf`L3B{Sj4ZC@?)$N_42_;eZNPp-^9#>-OyE@TF z&>M9^No`=Z0DOI!Eo`&SnJW6AC6#`*ee^-WG=&7BT0+JzD9BKDU-SdI{XENL4kO1viB<8Bp6`Q$TI7rQHDU*IHw&t%ytA(_2faS3uAz1`9j*fVXzc_) zfLKpM63H~q!x7FIyv!? z^tL!G!X!VgUS4}Rl&G8f2^Hr~7>kalKFE=5(q0!Z)f(#c9kNMqF2Xu8c{ z%ZW~2W8$Zs=qEUZCiR<93R=t|xa(TAhcYSYXXA8NWyys~(I_>(sZ?7Yj=vh;t9PWq zRVK(5y2T9_my*C>=OYPAI8XM{oJ$?#6`wVT0L)z?Y$`QZ5VOw`7laOu~ zpo7?$UFo|sGE)_Hkic+FHBhy#JqFTA$Q(r8KM*aaphK845~}>}w3W_fu8V5b&Xk8< z7^#D%RS>1jl+)gy9s-FF;~r4Y%T6L>w)y1tx>u4?G8z5kR369`qk7D6Pc$#}$fF-N ze#@~+gDik%q$y~nf7oU>o`tv;E3b(RI?^x>$=E)@8{`<%8yi zMPwz$Um3TvmwL5^nTq}#mV&*%S34ZKcp&8pBh!5#`L;q(YgX2zItQ{zYEDqiO4af# zYvon!(=23^F;I^#1>{IRV%)u~fG1R&O(A*vxFlOQ#83#VP1`8C>A7hrs%N&BEPjn_ z9c@Tqp!#~u$ota>f;)zt)MYE;V*v8kbJY#45c4hLvo^-RkEvAMtb8@q+S&yP`?0d?HTUj_X0?@Ndz!26yJ1RC3|MzoPGDOo>~ghnEl< z5mYG2s(#t={WXDE-@QFqnJhm-e-@Y$oKkX*cIN~v`PL5;AO9KUix{pBu?LR%2Eob9 zJ3X}%Fxfm4Ui#me{QN`#if$-HqP@9J?kI!uHc&?kI|56`^wEs8cgTBD2TfmhY`xcm zW6U0p1#i%gLg<>qqz$)=dM5JdIss|~)BQl>w96!cpn}Qdvq6gSrowD7JEFvPBwzUF zhK70bP0Es?z@=8#PHiSw7#a3`Hf8fS)l-9NiFGvsGxLyTUVnlE?bN zQ^#fuk~*8SIh#gk@A=)e%)+r>%mb8FMpl@UIkWl^)0xle0aGVWDv~vdS_{EJOHl>% zP*7$*oty9a)k|ft+gu*QXl>l^6y^rEp13Q+fB)q*sd;YbqYJ z?maOrf9WBS2ze`giQxR*#=|>P*%P`y%-UvQD{R$q+(y?++dl9BV||w1t{rEU$%j_4 z@hOI+`VuxN!pWG5u5c!WYPZj?nnEEY#ez3Y+9d3+Va#6#G@`h|1-iJtcqI&;hL&3&&r=6W`wkrPLFbpcmzH!+fg|Yl` z&CNM<(e^&t?Y&e|B@MQ+xG-SsTxx%^)~{!o5%v<-U)bz-KS)W^qj}SU90XXR_`aG@SiDqnosyro^1(m@0G#RifY) zdAVqD4;-x0Spv#D%jg{BXSdhg1cM)~lNjHld zu5%2n-R5Xj>o-HSD;KsWI7aHjMLOk$^W%9uHuat3!-ub+rXBbthBf54howXXW%Jza zTBu&_xgaKgFrAhXJcoY3KW(W%z-Bd{+D#AU-85`WgA3IkqUI)b8$Q6QhqY)9XKStd zQ?=sYI=jdK%W|1j3QTY32;YJ#X=TnDz#0`Keu{?v#y@;^WR=$v%cqbQyiJ_=*0h_h zEh3#SunJ3r<|eBH&WA<{!&wL)y@Mfa4T3M;ps^$+0sku_r7B`o8e3AF7q41h|bQ81q-WmFv5(#|_n^pu#1{7g3RxkXxKvUUa~pYI9h znt1@5O%MXvmzn#_vG&5w5CPx8F6VS%iWVem`FB{{BDPCGtS}cbWY5i`?6CR%w{>Z& zy(*EezKW$iN5?3Zje490o+x*|XLmE)2J1NaO$KU8quV8rTa^T3-mjZqZW^|q6^(!U z8XQHGDQ%7)XQE(L93A{bA_Cf$gGpd?bId+c(Rt=!$tM>XNyv9u^&)Y};nS~Nu zEho7!#w614)0x2R-9lWoAu4gu#ksM4W-d4Wg>)G|8{eqv$rGQ)8;?A26rm(Y-h%)| zx`PqFYp8{l-W{K!YqVvaoJy(_H17RXu-B@!D{7W{V2S(!8oz(LMu3(F(=J<(6ibJW zvEo0_jVBF-D}f+sS|@m|RQ2hml_6ARcO2;lVi}Blc^$y!2TNlVj1+J?*`|_F1=0<0 zd7(8*^6%9;8}po$eLSh3OtL5P!k5u%3KTMNE3?_F+l(+NQFN*aBYOEwM@DL<5LC7B(XaeG^BXf-RQ!sVA2t;b5#N`CG`ycR^yX7^tHM zZRh0V7q5d?5c7K)sTqibud}ReQQl73mpic)^F=d$FC-qr*eLdRIFL)F3}Yj7lc}_3 zrbq>m$l~(h?EEw5{!#g@W)ZRGCPdZso91#IeuZ(oQv71$ev_1yS9Y`Shi1KP4FjrX zu_zOwK7FThu?8ZDQDfsbsvKQ)d-i^ljuzD_@g7m3%T8kar{$iTBw~|GdvV?!)$7ek z$eoc&U#_kTmJ*^Fu2uPSjB5w7CRw2C1@9mi%oxruRzO`-U@FS~UaPJ8d+O%B-HDfx zHej|_+9T0b;TT%=5a#l}+}`VN=r*7IqgYF#U&ozY1=kRS?I z&pJ{dlgN4UXiacbX-Lw$L1IcW!(c}g8b}gCpR4%?O}Q-{98$MHuOLWfVQc$KdPO>ZP$-hmC4HZ9W<%+ zF-8x<6+E$7@&}{z$cq@1xYO!Fa4tjuZhrO>q@xR+$e~$2E6BY|dWx!iXmxroxuL$* z&O(85nkGCXugB*bjwp0#$ZhGJwi8B===X~o%Or0+Z_jdvydw|syNOPI3CJ(~&bWv` zm^Zs%MViSkWl*w1o?)Mmxy==2`A2%l2_@QDg+=vsY|`<_cY*!PV*AGtm^I>KOUcw& zSsY&aJ^ZiWTI_EyWCpTuv>bVEreL!A?KnpbmexCH^IEb3P`Ov@wTb-H( zH|27Z2d6faXT-g`hlR7YcI{{BZi_^vyl+>rm8j)4GUgi_LUXCPPFLAaAfR&S=)YI< zbMIaBwZYH^eQ4kET=!@3QJepeCg`Fh%H9S0W7$NP=xZ9E*%HiBTMP%DAef({`49KA zTB2U2ac-GrjoEF^Sba1r*nqUe&SM3HtFHn6t#B`H*&E^-3N9p&V^-hX2$8fKXQ|uw zxh!z_=7Ge24mX&XhRMd&f);u1YR9~;wcN^(<5tt9)0pB4FGhNpRVdc&u`rx6^*x|? z$MMrAdo;Rf3Uk<8juxDQEB-t6k}Ph0G-#o0$?AxCP4tsjCfVTo=;GX3?kkoEo4OTn zT5u0eRF-*J27Hh9QD>B^+;rj~w5vov3|=!{$I@b-EH_N9`!0Ey3nDk&rW@YXPic#U zb#CBAfEO{+1-)+LgXPZN1(WW4^c))|enIRDlI-Wt_B-{zIO$f`14qtTnx1|!tVY^+ zn^adod$l<1A7EOpJ32jCU9Frv0VeH`*%u#b(gfrTsrhSIBS#3M- zPp&-j(Yug4RyEOu825J!^O8RafK2_Wno~+*2zsrhfpt|z{4k7vk>p4GOL%pxq?y+M zi20iQjqzlhE`qfpmtP2&L=fS>On%{@zt^yBxu~?M1zLF-?n&%tLX3EfBE~flj3rGC zihDg5{;DeW*Uuh$nB#^{NzMzm)vUF$DvDk*4;aEsRM zMTWA0+Xk79=s{O6TD2OCbd*KO@&`j{HMeb!z0}6Ji`vkd)qJGy@74^+gKFRP{VWW* zCS}eF)yIM-Yl9nCxtbjy*#>Hov{bsl?VT)~X+$mnU27apbTbkrXNZz?BZTsmZ!O{b zyYDZ9+%H?H62}veFF+l_j&0Xv@K?ng@wAqako*o7Vj?5R1Z;8%(hrZY1oXqd?AbK0 zGl^|}&;_Z3Uq8KE`>e_7y`niYEucm{<*Nw;ipAi1Qrl7RqCVw-XrA)WwEB^xQ>E8d z(7AvDRk*Cr_f9IAp6rw&{wEk1ERug30XpmkOftPj>#0R3xuA$e`dYU4fB^fmTjfGb z22cE^jP$s|dkEYWDfim+_ybR2RM@Y&emfAd`&f?j*_^gXAh%RTXc|7KyvhB(- z;rfkfWmz5#WHD-gmd5b(TRYDmHr45cw-B)Ofy8Rm!^;qmKA+YIR6E*nOs>~?mT_hY z<9EWV5K5Ai_!2v85n7nyw^Ux&Khe7u7F`w|uB8caaruu?$>Y@@7S0k5qdjOk>Le^! zIenItV`hAk+s}i(|K@>X9T;weuwMNK3J=pG@FPb$Wn?mul`(#+l3B0mH2i*`rAj}z zjHD}e@0Bu154oCg%1^5Ix37P>YxTgC>@d z>F+u5l!emE#QqeUZKyvh1vYDi7fMsEhz`rBw)mh*A1JwaO3ZWVhmmQ>d|+~-s#Rk~ z*fKvbt6av(rh;sEWH)k5GKDO z9gPlt0eP36#^sz5K1-CP@1)5oiJmZRnI_S(*A%72Ir-JuKfU`NiGVOntJjm%hTawD z?BF(2WF~e!p~lde523lg1`M`PF=mZ!e0+(aAIx+F#=fiRvHJ-k{%!p>x@*@CGrz2G zcrG=1B6{sY@^~FI8~ST$|9GtYs4 zi^u}}xIz6&GbK}Ws{Ra*_u@1`4UQ!CO#ESyYYMvwsB5h+Pce6q&HG@pQtUR$5kOvH`*0;K1+MC)amOvW?J_VL9zaB@LU7SH&W~ zXe&j|0Jzu!W4sd3Qce1>^to=?mt|A^uhWt zCo;UTdENuc^Tu!%4cyyWk7)*h{08*Ut_w_^Vm5n|F^950slMiP8o|hGte6D+edpz< z=L~bXyvFbV$LzRf_Vy7I70l*9L>4`Jp@gcVJ~}(_G^i#$53wyzcRDJE<=qdrL1vBa zSxKWwK7zR)vK<~k^`0dV!s?M)BW8&^fr|vzbey^FPaO1w#Y z4a^8;OAa(u_GXm)l$H(kptwMDt&!9s81Tw4#q9-K>ZWzd8{N=*pTE$Sp(u(Zz0T#k ziZ**|l_RT)n%ymMU;v(1$mF-X5pP`yZmxn6D`~NQb-e?KrsdD1wiW2o+;f4eJKx=Q zR8jico_YArJ!RnqaD6V}ufYLkiRHL{c^8Lo1M{^kSCs=JK9fUg-rxt3k+&*#VZ->3 z*6(Wb)YLyeP)dPAKL@-3I`vOcwTrlg$#W#Z8DEIY(_=d9app^`%nsCVD9-N3#aXkY ze+tK>`XI`+)#G=Sqn_X)lD5VzaUmGc;O*dxd`dj{n%~p2_x0gCH2xtFy2Q!Xx&?Yv zt=!HIgbm`z%##tKd^bzNvlCz5rSuqTFFBlxpJMce9L<8nYwE}_ovSXL{B~k{FkvUE zF39Mk)A0r{aqlkXlH%fg9|~s5-yI0#SFt<&nVQB;q;!CXY1TRT$|X#lBL_xr#tTtZ z8H(LeMgnxb*`TDjxiu3BL$>RO_m`H53Wag(Waa( zgtfm}>_@#GoUIFE5pwAxjBR8_@FuhikmxVhB|BRFbAD(P!06aAjR%t450m{s+mdp# zcFKC9?zk@^0gbIn326k479v9Gt61OSTti2UtsyEF4Kc*dt3R0cWGQ90h8U3qHe9F+ zjqt{7`kv1gBfi{Uup-e;&1#ntW)o{yLJ|DcmW<{z-M8$W!%}cZ6;`tMpY)bY`?fRq zxl3JmHknFE2B2VqXCSP+7A7H{8)M+up>AC%RXOW`A2F$aIW%G6Z6-*jd6TAfK?vK=Z-pgudj|h(;94eltPYc(|wZvfYVW z7(UX9>>l)<=h8rQu1V0=+eq;IXyXvV=WNPy%+ zten z$T{2cq6G-5h(cz^JeuSa9wMR7%~X|v5y^k5C0c0Ljef`aG!=i{>tV*=&--y+dJn@u zkM@>0sJm3X345xuV4giK7!_&y1#gG8z_Hu@duqKDLir8767h!+b3cl1^zQlnddeKo zGmx$9@HXNA|LiB#I|{Gl5T$soPiSGt2CYI+!`$<|{W^#_wG8u+PrOXMSA172Dt6X8=uSmPXRZFwyg+3vR5uh&k|51=SypgJlfxVr=V4I(QB9^3N66mIo0MV~ ztXEe(-GXy||I&)QKuHY8vnyMMUjR5pP_FZm-4VapD__etrQED)^JP&Xe9Bq|Mg^-| zM?yy%<8B5kDsSDb{%ngYPxMh1X&-Jghze!iXAO~Z`M7x4?^dhyN^xA1B3ALT`n@n} z4B{QTTe4Wod(d46b>FF&z0RKfXMI$PElDu~jh^4~Wk>0s%p0VD+0Q4nB1v%o^gN{w zQpS_Bb0!@YG_I%{)y6N-aJ~@2+hJVA@6X0UG)4Yt4RB%5mqBn{jHu#Yurq4(u}7~3 zqlZcUL!Z9F#di40AAYa?NxPu(8IEzNPZ9hM^DN6M=90riZhat`!G)>tAeJ!MUn!Vk z9*!SwYa@(0`c^WsoC-|?C_qDKiw;cTm2$)s4LKYgxxGiES~(*&=hWg5#RPBmn_^() z(CCMt1Ol@_@zGhS9a;#7LCtAmAd%)gSNbz#ISi3Cg5n!rXI;Yp1{U3L1!t1%esT=6 z61?QUv-co|2K9e`Ga)L+JAMXU(##F#-VgEt01BcwU-mpvg=DmjuonLt0S39@}!)cBYIQ|u(Q;j{0|)30RQk{qoVQ+fFaIeVux zec3P#67ViqtadU)9Pmtgj?7b6*HWzEC9lpMz(^9ZhdQbthVY`?P|AXQ4S1UczAoW! zG0GSmE~li>FgA|KaN5f0!ZY+DOx^>U(^}fe*sQ0?T8$JP@H`+EtRl3G5Z?1pb?jmgJUkZcIbn8#kD$rBD2ray9Y#4VYo+zb6uKc^8w)daK zIyXa^Q0WcyaLMQJ=A*;Ki;zI74hmy4XqJ`u9L^7_Zq`Ah2rX)H;rDx5_Fa;+={XOP z(;umhHdu`nd3infyC`yp9at5<;kF9}cT&SWqgrubz~HxKtO(ha$Gw8c6_+{Ba7 zz9Qu&utegXq(;RRwH*DFqc@R_h-`r^Ay5w_p8^~qYSsDU6n`6er9eO5?_;v-=`?5qu{;AkBa##QxgRV+hu(ayobA?e8N@>z z6P8yD?#3sndAb7#`>Y}yKX2y6AFd%*;bc6$yJrbssdjmWDq2l!JeE&GEq|2*#t5BR zUCu%UNivKp_Qk6aG>fN7qsw!;UR+*pov)xiX`EMV6{1jsZc0IP{5;0xL${KNcss@* zID`0L|J?9z<{3@_uCS*px95gvjZS@&Kxv=B`G;f1+&Vj_4LpZ}fI* zNI!?ABw87m{ijk#Fs}GdJuluO{+~)5hB)-;LPgTvPyCM{o{9x@UjOgkgir(s6=mz4 zqWUL?M;>&m!1doDbP_-hL;rn43L)$b(*Mj2=6(48hyPg*%m1gjXCe6he=dywWBL01 zf8%UHG{67)^z)yL8{6~zSVjTVLfAIIem#Jv*I;Yo;MHFfIv`BpYW4Mt#T{|zd4-O_ zP?5g*6PsJV#{cB-&LnWl7OKEd+mzn=Xx&|DFG}@(%P}yv|HSApdP;EU{J5U%&E9yP z_ujnfJE4Qa2>;JOH=U|Z+COo)e~NSe$Is5Mtv48{55Jh3J53Itii$8Yl8O>lV&4P* EA1t{n9RL6T literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/mergeelems.png b/doc/salome/gui/SMESH/images/mergeelems.png new file mode 100755 index 0000000000000000000000000000000000000000..dbd87877e0b73dd08f13fa9d530379dc7e42e508 GIT binary patch literal 19490 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/mergenodes.png b/doc/salome/gui/SMESH/images/mergenodes.png new file mode 100755 index 0000000000000000000000000000000000000000..d7437e4002736897ecda44cf6849101b00258f5e GIT binary patch literal 23896 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/merging_nodes1.png b/doc/salome/gui/SMESH/images/merging_nodes1.png new file mode 100755 index 0000000000000000000000000000000000000000..f64bdcbe2f052d3976e9a40c896cd8f46988f3c2 GIT binary patch literal 28624 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/merging_nodes2.png b/doc/salome/gui/SMESH/images/merging_nodes2.png new file mode 100755 index 0000000000000000000000000000000000000000..8d7cfdd09e8a84046a11579a2448152b4eccaa30 GIT binary patch literal 17338 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 literal 0 HcmV?d00001 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 index 0000000000000000000000000000000000000000..f95dc67f7910f3e391158c94c238a7085f5ab9d5 GIT binary patch literal 17404 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 literal 0 HcmV?d00001 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 index 0000000000000000000000000000000000000000..4ee52ebfa2896e7d3401a53d55b97f6b76eb9dc8 GIT binary patch literal 4658 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 bBFqeOh2lTW4jxVd8p`15>gTe~DWM4fHSjjX literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/meshcomputationfail.png b/doc/salome/gui/SMESH/images/meshcomputationfail.png new file mode 100644 index 0000000000000000000000000000000000000000..9c26158e2bdc2469afba8b6e4268446245bd5d88 GIT binary patch literal 27336 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 bp8;p=v!9s7emsW1P(`7ptf^F>U>5ja0ewWQ literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/meshcomputationsucceed.png b/doc/salome/gui/SMESH/images/meshcomputationsucceed.png new file mode 100644 index 0000000000000000000000000000000000000000..ab2357910453ca58bf05b35cd53f00e5332c0811 GIT binary patch literal 26320 zcmbTe1z45qx-~oj6$Jt51_dOfLFrIILP|jaN$Kux47x$OL`tNjJEU{cIcb% zH(Bqzdg-w~5Ptdn5MuKD*wY&8*ui-VQTn`X?S56MNQagK7`~ucRNK|l*W2oy|U#7LjPzCT$xrt43 z(oC|o*QTDur+-G~;I`4z^Tw1Rpt|bKD{MoFviSHlcSu5l>P1Wf6BL}ExEmQ9^|Xw9 z3kkR_&j=wT*;3z{O4y!CkmrLMUqmJ@zmml?v(AHciJM&T^6>8O9quh`)lg+>Jz}Aw zYl@F=|FiwR^rwD*NAD7quTlB{Bf=Bc&CM;L-?+ZMe((6WqnDmi$pQCR#6~e4*(mC_jp ztaJ6-gVotc>>V5gz0RLPo>`2xb#}g{mg5tw!6i^;UzrLit}}*fu^D4eO(6sw7;)-a z_v<#H15KAAhX;pkt%f{NQHc(Ac?4e_g5_4g-nJA-W2PIZcNztj+wVx^2H>_ zhp@ATv<5`jZcW;mkL4*;Jc%{?Xm9(3K7cS!?H6pbb{vPOM?9u`MI<>fDiI_6a=3+M zY7pts{3$me=(U*f6Akv!Jl7;)^OV-ICGGO=sn+fl2ItF-7moVx55hS!yf3)Co$h}x z8F2T8Zk>3{yMWcZ_paD7C#slVOcf8BCM;*HO5!qihIx5)wSRcnwrIOxE6{A%;+Y%- zvnhTRM)7R2$wyq3lk=BqUZ_tYm13IMz?8g4iBo!i7jva`nMo|c#I~a>u8@+g&RyB% zlq`&Z?yuc%_k1_q(nXp-wOZ3%tURHZ5SB~6gY#20myo8SF49Q2v-@joico!Q45kWK za(_zTyxiC?V%ew9;99G0MdKzTwPkJ>Hf%ah%?T%nxx%~KqmgLEmh~I8Mb4>|dA*`X zrxQy1k9Beib_Xh$BQ6;1S&dos8XHb0+!ezdu4D_}Z{cp;YS)GIoQbg?}c zCHJ1(=N$?d=6*&NT%#`yBIaOmuyf-@79jW3?4ejoA}^He*7Zt6z}4 zvqKsY9>@OoV@~XwGt3yYHyGGrmkD?J>*7ok#ly4)f=_6klwCL!_Sn+~$#jo4%m$B{ z!$;SN3RGF0HbxgO&r;BPU0oBp``HDe^WW!_?C{1p#xWveW81f@<`q3XMNCEpY6~d24hHPHV+Cm-iIrN*!89@JEm3Om z=Fy4@1br@qNMw^K)dfz#h-RcJ+{tuDi;hwt9%IF~Y@A9hmUy#nw=vVG*(ycUB-4sj z_nI(OUgc(^+3J3s%@A)K;IkJI~w7vQsw;EU(}6sO3=;KLnGnpOvhVv zLnN}{Y`KwbmaJ2>(3~*cGcJWnIBZi5Zu(M4d)KPDrytX7_%}r?t2?*DP*aeg=d?QK z;Zz`cG41a7eP1-u%e)1|z?al3S-F9n&tqSFXk}JuS@DR}jh8tEEz?Hg5&2%N*h;g@ zrCuRw(j$3cw9+>&{w`wIdCk|g?&-nix^H*GcDG}(`tv``24r0AJQ-!WcFHFbY-*>j z;$9lC5{yrjXbHNXX+{2F;<%2E&gjehHt~L?drWe2z}Uu@DN9CHR_y$Ezc6H-ewA?R z5WpFe0eV*6kO1A87v|ZDEv_92VZ24W&61{gZHfCH{NcPjd=V2X!AI?Zv z;J&L9PAd*QLn4aRU9N?2J0H&u(ORzbMlcQT z21)PB^nV;(ldTtZ!RQrBlNrR&c6C@{6*(GKd@@#z;j5PJ^I#XY``G$~XL@cTo_9Tw zYP#v3uiNhZM?!Nk&2^Lq)A^iS3)xohil%P)cKL|B{&F4j)Zw1bf&Pt-o7TveCI&#umXY808Dh)BfdueF>n-xFW_ITME=EN0ZK zqBK&z{J_8`eSM?{e&OhLAtvBnJLtiCkjrVbxf4_r|3)0Ye7XC|`psp~LO!wRMA`N>72ljVH&X6l`xSnvjw3HMh z4GrU#voL5X-90@^ZR_#|+IUJzBBH6fvp?OE8wPK_$ZbMPQXVd4gnxkb4 z1!L{8V!FTP<|2qU?}T1D;1Ve$R6mHW+_Dg+q8MKxogNkK?MU71+B*9E* zz|CPeCTD2S=GIN9*1h}iqPiVA{p(q-n-7qKE!?F_mt{YG*l@84whnm-T0nPlh2~OM z|19QnN5`k^FVoN$+M)_aZG^if6_?M)PB&uiomRSk_F<}6I4q$xRj+!|EAEanuc~C< zGMq%xpF~h)fW|J71KESwG})Q-MnSfw8l#2l8caq{27ImwZ#;CDT<2&_hw90jb}qZr z@tWhjN>s`$Np(9J#}+svT;ScE9tQgbx0?5LRaNq*GCO#jG(_(`4C!j|Am-!aWzl)pe?E2*ar;t30ypb`GVW@7;gjvWQD*UHk}3iwX6C4_IEU zlOcw~F&+>SO3XJ#9BdZbjpnOG6lvE*JFNAk4yTpI)s-;qE#+7<68)tIF zRD{2++P-Y(Ut7Bwt|?2T&1L1!>BMk}^lE%0y);sDffpuI^x%1~F9ns5_Z`ji8>|A8 zlb<>(n;hD;k)~EXv`J%2T{l=oY8fwYZ;Tgd84Bk#jwV9A=2ix;`$r4a(mU%o*~{gx zHzy}2^Fkkb^FfvrtmC2#5gn@*wWXzWC&Dw?>!zr4)Qq?L+53!_?LDC>zi$=4ZoED2aOB?Xi&kE{ z>HSMJzeBE=^G}&RwY~j;`puPIrS)tNR2{3p<!5vr)|d!=heR>aO%_4P5DE z6}Lq{($n*akY4!^TWdt3NtzxM6T4`z@yE%;*hTsE#UsCIQ09bJ$m5sDD&tblwke^HcU!jJqIndBy>3kXsVv_0b9308(@5AMP^CooKFMW${&)%p4L)lZU9ld zE{#MYqVwJ$6^FwM_{T%$#c(Z-auP(JM0>41B-!0iug{N)Esc0`^d(QZDZfO%pTwte zk0!Kk;~4I6Bt|@jDr+QyAjGvvk!Xr(YF#=c#Rhd)Lm}KAs%`o97{d`ZETiDM)|6Xl zhkP)odz1Ycv(9H)!PuAthmx;taVhvsOm`??;jbJ$3N;+p20zVS#3UT=`%K=b6P0)6zTCml z5#O|%h>edU_)spCHhM&JY~OdYGLJU`}d9Kt7>spp{%xOdSZ36FZ5qCqT&1+Dkv%2 ziD6Q-UuwGt(r{=z6ddY4+C=>+9>2mVD53@rZuo){&7I(5#0ltu)zabP9q+y0!+6BcnA= ztp#pxiW!V*7wc&E8S{d-7#bPrl}&Z^^|k4j*mhF8*ba!EeB9roTY}y2Adn61<6bpS zYCN2(-%Co)EQg=JcdOUrJ@c34h+}#d-*!{$Et1~AIW#W z>`Qe*j0mEXYY|5iJS9HYuaeyYf3#7oFllrl{Cw=E##Bg5ZrSOP=@Soq#RnBgvK!G2 z&zZ5<-E-%+-m|H@MZL61vx>`i+9$j!h@yeQ<`}JDZ_%0#dw`G6lK=N3u3BQtV9&hH zq(&+5orB$K4~Y6fF2_tb(p}w>#2mJ1)INW**_cnO>%rwV9 zYY2j&cri{CJPYpzZ(p>{UvF7ZegVXFRgoNWQ1NR zjf9Y->|O}`{OgK84&~|c7as-&hOZZOGXwcPKE!pi-f&_YUvggKZ_b2RcTK6@Oe;LV zkHY2{07ssr&@r$}Oitd7=^(yPHXu&V!xQ~;_lN0F>1{W+#~uXbbzaqbt;5!z0|URk zjYnjVH(T-u`V>jXKrcSh*wpXed1f*0Xg#RExSpHdF)~8vdwS~Xezft*_6--_iF*S0 z&0yBI1Fc?s)63m)_fG@$juEmdIT5IG(b|*m5*N6ZbM-aNrG&caGBPrE@%%-*N(?%& zzG?q*D_ezp{rWXBD(VGz0>Z+=a(_+Scj5cTmY1!QRW`a&7mm-ipANb9&1EJF-7Xu1fM?>;v)Tp4Rv1RH8rD=mNqVqCV~(k@cOIYZ9ps9r)mkSL7l zyS8R}z31a&TQgH_x4d>DDSj?G6_KsW_EMlG9!>gVms9TBuPqsy-i4H^2ApYeZY2A}gs;tnAh znT)*r{Y#Z%czuQ`7KeN z(fwoxr#aPSE@;*ok)eY}KGNOYeS5<_>xBN*xQa5Y(t3H}&zFwFnox&V9Dg55bMtel zP_h@h((WUL9{ia*It}h8$EthvGiB#_hQ_~P=i z!|e2XtyF9hj*kdvDlo`?J5DLbv1_XSw2sO9Nc-)uH6Soh3o{-L3N9R@?&^F->0?*q zqk6GLC&g5u+X8q@93M)*0xX0G&A>iYSd63pb{{jJuCQ_Ghw*HDXh=Gyo~A@@ju-aM zHF%`<7HDfO{CEUfsg@Zf5mj6CW4X}MODFG$rH#;th+Kot@K9RuG>j&y(^(h+e$?hB zY8MN*SWY>?o|~#Of2d?T7oSR>sn@cHA|8;DnTFOgDkQZHW=MSa{ShtpiJJb-OwB|& zbx3>59|_ERIQQBOdG?1oNol{GO`lGX@wnc7pRf9uS>UdX&2GpxHV*vL1?_^a=1u!I z78O@GTur^vQgCW&>Z$ciLVG&Lwf2RsRw})8D8sX7VDCafVR}zE1DEf-P6SWk)2C12 zk0ksbJb2I?QRj?o+0%O^=IAy#sMnshRX>DIfoZ!p_=lB~8C3lXyAP{~P3hOKu^>^J zKN5H^ybd1%(8MRTo{k)4RtA{6or8mVz(qwSI54pKdn6G)zTFFylehHwC3wE=wjaQy zKy0kP-?b5Wh&*Z?m?$n!egyF8TW2gOOY)`X)#<=^E7cj)KfRcia@@Mvykd9>N|HVM z6ksWnb#PQxK7QsH2EoZBL`F`Io}E4{;fk9=FF3Hv>Fuh-@W4a_d%6^1!!nn5qxaTS zL+9P+njBP98~3}fl}5iI@M0K1Y$aRg_CEZ2Uck2tJC zYknPhC9BI`7Kd$9;*I28P)qI#+<(60O*xzUF4Lx>m1@c=^Jav7s_}qJ+Ie#F+L~g4 zN>79JL-9a3Kxy{&!bgd;;jC&!Y^C)KdWn$inXa$zu4vsq$ujYrfWRasqzAqqZt5uX%7}dNgj>~WOh$*CW*mBaIlW2A6ey`R;Vr3OB^kL&Ny$W+8aM>q1wh;`RcwLun zZpZZm6GNG5ct2dIIyx~-m{(hlU4|1bUJ^M-zly5v^k?rCq{SmMpM~~j>U5Y_C>JU} zqqYV;!D1;c%J7=`VA!{hR&;fMH@R<;+SzmSw3bRi$J@_5u3yl6=30@0mKKL8h#8{c zSw%fBTsWzm+Iu!<;AgdW@G~9_A@dGYoB3=cw#xwq&yCaD%-&wO58kkQhF{QyRfpb~ zsPv5l!CUz>9&+EklGHWWIoD8fDvQRpbAsoD&rem_JztuJ>FCIW1%FXO&=U*f=j9i= zs`vn zeNb%PKT$QUXSol>cCHm44I&Y)BowP8gbWGe##GM>2A9KME~!%T4hxZQu0{xeCR^mM z`I6@*pE{mKqd|mf8&}vkre-o<6SV>w8WdOQI|EU((AJ+TFOSAmJz*c#!NHGtrUvL6 zG&*?Gw#A{rMp6(DiNk^U>{0E+kZ3Z%+p?$Z9MB-SsadF65L@7Ry^c8aseMdoEG0n# zmH3q>Fz{ma^S)oVmdq9B)`9~4!$MV7RXpw4CvHH--h zRKTx4lhY(P5w0_aE{rTwC!EXGjmrANu?yetC#HuWQ= zBZ6LI)UrFY{9|*+3QNpAT38&DK^2)=h4EDB@6`?4d;rT0JU2vDVRaqliEyyQq9MynbJFriA>hT1rsjEF|h) zaqE|Mee_ssu+n3Mpo~QkF>QWCNj=!aW3?FWXY^wf$0v z|MCHgwEM|0r4fiUfp$Z~bI%S+_I<;DC>N&&4RqnrmwWf`GcYpxzonNhS>IH6Y+VdaC<$Ej*OwI? z`L)Z6cKk%uj$e$+5=)jlc-)2!KiAzMRp$^BOUsZ5u-_PEVWS}lzjE$l=1r78+?l2H z72d5U1PxE3frck1CMG7#sLE=#KI7Jz>aL;U`|3u3$xq zC3FUJsu3lKd!E`FH;9KgZ%;?1rYeN2vWN1NO@-#>=5lXuZ-=$(vy^&+&#raa+}qzj z)80n4y7od{w0l16DP|)%dR4G6H*#|F)AMumy)%<^Fh?lL+xfomFplkmzWnZN-O0%_ zRe*{-);QgDJGH2GnlL1vpZa$4Zv)rVK|fInVXxNcy|KY`l;E8k|WN}>jke* z^}@*6%`r>RXBQ}Nt8}^nMZlIH(B*1sK3t9vhk_q#`KI%Ye2$5*un;Ff?F#evB;M6~ zE>&RS)J8mOC;h)R;{UmF|4rwfA&CyVq#W7}^1i)_14y*gby!gi6tHr&ipvotQNUiU zyeIfxNv@2;D^WFSn9}=DOpM0&>(^V#Dk{Zid9)Kti6-fK$kl#+M-&!$S0CA0G%=l* zcuv_v;yAQ>2(QwZ-=zJoRY-0GOu(gUjuS#EBKZLt(XcZIoh=2M*u~VmEEyy z1hu_1LlF%DG9Xv_ga+)D$~TF#)+V#HPQa`odZPK;7ERb?hk=gnb9QfBspS+8(7=)amtzJ~G7xDfW@n(H_ z(GO-Ku=FQ`)Gh$rw3x?Q3n%1&7Rzu`JIBoi7#I63B=X%uKoEu3Q0V_pI{1H5g?{<9 ziO+#*m>t6faKw|__J|xGe-Y{oKINO>W8ChxEJ>G22_U5VhEQ@IpY&fpw0h^!R96%J zRoa@`$2ov*rYrMnNt^dgscg05DK9qEYaMs&`?par*Xo2P8`A!=qvrn7@-iAY_J@Eu z1FpTBeSpa;Nb?(;~w^1KRj+uYj z)7sifE@H?9*nV4E8<+VCGoM$(J>UN<7$IOVvABuo?NFcutByynLj{zwOv!e4Z*MD@ zhAQaVJo&Bo4FmpDr-eJU z-^;x0ws|tx~2Bs@4uw$pToyQ9`10o`nGD>e_lm2!SATFFY0>%DcLb|0q^}6YmTHv46g+Apkj#XFb-AnxK{~Yjz&F0TD)r=}kOxC8?QF!`Ia=fy!;# zS7_O7YMs}5U!A|AA#ffe0XXHf7A_11w0PIJ={{l9S5m+_H-SJcp;hA2h zbWi;PO0S1Ws_ewk6LOA@jv3czWT!LFudha$&`!6?23&V+2DkwM1Kv?HsDe0dog_e1b5} zjU-yqUtY8KAvJIZwTiM2K|2NJ{ZnWmRiM~&byG43h(*YIdeH^oQlmHb_G0@2Hwc=O zo(-&Nepk+(T)u9M|4tM0smzQQ=VVK^_V*CgrBNW7*QsiP|09 z0%;AqDLh)QQ+yjGFUqnh`RC6e?|;2p3>V&E9u+Sd5BThpAAeocm-H-zpRwTuyeAgz z&_x4XXyyq(^}+h7b_bmRJnD|7C~-(<1Z}QftG_Rj&@Lnn>T_p6{6-`~d|%-0{Hy(q zNwu&u%o~qL;5y9=9><%2ReVKb9u^Xk38-twVHCZz>1=I9iDIuRG^!VnYZNQ$>XMRhzYi z7t39Ld~PmucdD0hfs2=MZC4>ibg9{J=<=9@19~bN75!FbZVB)X>2RtH*^!Vxs+m$a z;Z$Ou!Ibp8d|hN}-pyzh)Yab6(d~t*%%-76FAqyT%H5_LF_+3lLR;_8{WqBGO}g@q z@=>JQ;8KtU>_x}K)Lb3I!a@XoWM-Pp_MAohR))XcnyDf5EiZpMJUpz0szmuuKIO_h zFaEp$B|`=YX#E3v*s0MCr^po|7Y*_1DOhaukJp!H9Ufc1Xn(ycdcRK$zbm51QXXn9-4YX;i2bG zCZF?>bjaFN8Pf~ATl;GU5j?gF&w&-aXS1RNe;sS)m5WTbKm266Q@dF-JQ-`x!pP^p z`=im|=+_uzv`9PIX>$Ufl29(W(h7p8>5gOP6ht^ZOj;=V13}d=aQm|Kvx7l2#Lvg` z059H)6!ls@E9))XI1EBY`Gwec-A4k<3E#dE3AwEI9dO1|`lz7F!^{07Bf|&SXjvnT z5+0EFD=z)EyJ@bM_mcQ5UW34s*;tR;5EOp3Z0^N;T9p)+WPDjvzu!T5pGx2X@Mxc? z{_6VmKHs`o*wKL(H7@kOPyP}VvG~q(KXz+CRAj;%(?5C=0e~H#ENGUeDw0`S$pFea zBd8IxCv)uEIf2;iMv1^M0|q@r(mF^V)jXKzOwqvhoYF%B-ywNKykixB1$QPDxc!9U~>94Ord zkaXS~S@`z2e`5Z@;q%D-G9a5DKOw|tQJV4AtOa}tX?Vi~5X9~zXXS|#m;mlJ-rxcQ zcZgnkeJr2!f@TJ@If2_CP@Vh*VAq0KhV;wj zn3qO*d3pCK1Oge+6if*QzrMi0i~=Bn`Y<3;(ZVni#H`#uIe{`J6EWpdKu;PhmsODp zr!o`SIxHIyTi&U3QEAfg(x@`;UwH8a+e#&K`12Fh0#lJMT>P9>%_=>V&&(y=-Gv|~ z(3C&(^G%XQz<>?Xl#T{wdbVr~V_&N9ge%0Xkvp^VHvn_6is;StZb%5|$qyNY{7H2^ zqn0}(NHt6VixLq(bmM^y|W-kS{c#Kgn`&8DKi4*`Z()yQ*B%qR9c$`6~AB!QNg_*JTq zldILG1*AZuBKYS|W`Glojg6sa7i7aDBOgli{Ys#~=m$eVHm;VLN-Ijpb=c+EvmLd@ z>s1Sl3d{EIFTP+^z$f<&666{Ax8VI&BNNG!B?g!_4M!xpuRL!zgJ0Z`{ru~*x%?Ir z1x8zwC2YElm%)Es5|~6OxE#PuNcO`f(Q#X31$o5Nv$Or3I#OEGB%dN)AkW_CtJ*Cz zqZtpR^>2*jPaU^bqHiKV#)mICOd{0&E$AnwfG>rvi{4DNf=K~nZKw=0Q#yj0k=R-z9 zQqq9dMMw($MNWSbg%PUpNv&&ES!aVD@plOYU*ya0RrBu2 zp`rJ|)#zN~rkK_0X1Y23>T|WJ3zV%b%&Ll*EJMl51STs-FBlfc$jYKUw3j1tFm5Uq-T^|e`p5q~cKBDCYuiih0>sm5xH+7n zKT$Y$P~_J!&2^(9_Y)ye-tq{ISE9A@)QQJd=L@bIYNVdU1vz zy4Fd1D);Z#gGVp_8Y2H^)%i~*{XdREX6!quA>z7CFOeWu>K_mwodHjJX3^m??}I4H zk>Muc)afhD?gg8#8MdJS6c}oJjzR}QCdD^(&Q>IBTF(I&kgKVvVgx6UipS0cR+pz+ELNylVZ8VKkKeSt znfB7*zBDbb`6#o2qi&V8b|%}CC&6M~7mz_Pl{Gk|)a7A-o>s(`kk3VdwLFzaHZ@0d&16J%@Y&xRde1UVEBz5 z`R$wJ_H+f>PwhHBF!s!z8rA%d1H$PB5n*1hT8DD=4E@^>=bf3L;$lvNYcc=BLr2vD zbv?EwuM6jm(Y)6D;>MmtUK8~S``EXYM!h6Fyu8?N>ZPp5ET&H0Kj8cp*!Hc3E5$y;Q0FSkJI^oYqS(2IX2{A%RfC zcZYbWT1EJj)*=2!;8Lci)9yB26mbu9c4FF!jaZHSdQT-_>kGP6nfsA><<;-P=JUT( z^r@r`U%{*KL=PW8MBR@+0@qgR!!^^AkkdwFN{XeYavY_c*Sq69+8+L@v>16MC6oS* zXB`o(iwkoeyN|iKqw;K&;1zolSZwooDog|f1PRB`ryb$cn%}qnVA3)?dh`i(URf&) z-jmlDt^R`PSYpP9Wb%xJE>#Vb`C~mmpN8VS#-FjU@DU`Xu$qr)E5ROf zAv1dM;zfbhI#mfUlO9k}X+5#3AIppA5j&DNTOE%w)Yqqz@W0QU<8iq4C)uX48#KRO zu+Zxh#k!y1OihA`z!F*=NFPYQxio=*JT&CrVip7_@q=Scn-~xdXmCFw6E%KnZ$vK@ z{_*tpqP)8S0cd9R0EMNde#T321D@8Xu}@rKKB2$Z;+H)+tQr5$0>$qB+V+(WalwCJ zA~#B6;NGLD5;_qS6m*}KFNNZn#c%IfcgV7>6=?Jcd|nhIIZCYW5b>;y^{dA-J-^=N zwJa%-l73JHhHV_DuJ;#BhIkd)Sg(zMgZ@JL?)=!Kq@J($2m#<_07)W(+~Tc29G1(T zWdm~mRcv15)_5T$Fb`R`jR6WmYF$v?n%v)`)_=vke+8sJ?7CZ3P+faXZt^ov{g8XqPhJmN(9AQc@C6fZxc0q;!8sr}>V>M;=Mzm!aCm#kd^oqwoXDK}Ci^NhwHGi?^)h!Huk*tU za0XNt{cZ`SeQVs7Q>A{005PSGsrz7)D22hyA6#n)pjtABWUY_nIxt?{m&T>FLvX~h z0@?F>kP9eal#eo;B})haSq>B^LMkjK7zG8V)J@h&r(I;--{6=iwym!X zZgIkB24c3U6;8^Do`RZ-HyQK&Z$CnrjGu4AM&16ZGTvfvjhxM z^y8Hj6pW@0jNC;Aak9h+ShT^A1&jE}V2vCC9SOh*C^TGPu%XgwB3Gj$EAUlf&4?+> zj)8#);QLG@AeNUg1kw?e=3`HAsRWw0rpi7vxIcq=PpW>r0&{^r<1%QFPL67!2ISDa zniMG8`LMIIbpOrKJPCXI(tQ>|KEAm5@aqn*)E$h6tgIo&+tXzR2;7D$YZSN8I`aF5 zmwiC|04!=vp95gEznU*22OlUaE4%8QVtby!<2$BGaq(g(Bv7%DQhwpCuFJ0s)~V?H zWlsR*wO1(c75;qPCv-JfqP$O`wKupnny0e=+x52_(ij-2(x#@&{~khpk$b~1n+63b zsXIU>8XP7J@w>-cYbfEk29M+_fjb&{Llb#J&oXr=+JXIdX5Owg`b#?maQrxZRvW9o zFy(DyB02^JHNf*n4fXuN4P!a#7LI=+9T; zm{{$_CC`D^{HDepj=rgw_B0WkrTx}v3FX|5 zW)J{ZR$1My{$6(aZeXb_=PGBv?%3>w!{Ig09%j1&4|6S9?qc!(0-3B&7spX_j7|MOn1S1a^w?V zB8~e)W}HE`2N;GAfinOeKHi3zd}G%r4+OzKB_M!BJq{gP)8<8f{P?jpQiTTrb7A&9 z9bqb5M#Ypai)CHb!qt0VA+xF*Ba`QGeAeu(tvPO7CT_Ta@8{R^Z)U@`;X*)hOdTFE z9&b&x29ipX1voK>(@V=txUvG%d)a! zXpjngTzI46$=fRHS!FY1p%ki_q2RP`@sSx%;@VKAbd(WL^7pBQzNzFY>h1rw-KsLU zJ-!KKJj80c{1FRFH#4llf)oq}F&7pCXpI4qz8Y_`+T_Efsdx20(CQFeb^^yrFBSUz zguY>Yyg@U=saNwk`qrf#Q-%4M{#eg@RO{}*Bv1qM&<~ZKV2Xv$|I_aW3aj`pZS&jp z|G;2%U8Rey0lcfb2B$k0yFlS#)YQ~SB?6op85v37OO(Go-r!lw{C5J59O3G`HKX^9 zUA@{D+}c)xGIYJq*Yjr!la&iKDj;h|ww%BK4LytZrchK=ugoPy)Ebq7rRZl-e1l;F28?&s9L0T@42Mptv`SMKpeLwqtZ{V`if@j zCM!Hh#l*z6rW>$B+U=JqeL~*+2QYb8R|qV(bPnaZ(Ed^@hGM+HtERHku?D*h7*CP6 zk)$9+C*y}j9IR#C^Npqc;DD7)w=!jG%aVfMx(~1_3@-aN8E~yjVB4XT{6&Mc@con( z6^yhcU{8YtGmpXQeS_WXS3l$_AEn9=-))r#u~fZ4Y`U!ff;9*735v9PAc$JxOcy}b@0STba7DQO8{C<_o(#j?76v$N z_KjN9{Tsk7u>TWyjDmZI%>Q?AR-aV0>mLYQJ}^#%9B#v^ny=-izW=4?;UFe&OG8N5 zs_ioS{^Ojs)efDIP_5+VKmzxdX{QvW)9`=Exa==?BIBDb{k)Zq4FC!1hC=zqd;9z0 zH#_IzjE&s*zCZ|TjmN~t2Q)Q_CpXTurHOiw?JwPZ`SK+s0hnb2IG*91G#;UVVG>Pt zWVieu3~T+y*|$yJF+P4wuJpF)aD7AB8BkRe0e5aqM+Z|yxpFNq|Cb2Bg@XpJF2Y82 zv7PX?as#svLKLYKqZV1i?nGXbx;6;Hem#3O<& z5n#|K;JWvn+v~rE8w$a8+I|ED4q_PWWvNkb+-3cV2^gD3aN7Wy{1iZDvpsGA21r1F z%>gj1;}V5yn^zyoEhfUj9@Thi^Y+KK1{(>uvq$b7iirIa;5KUi1K>c!SLLVWpO)Le z!jB0Iyc@@%*#o}obvYjY>+9UPf9h3=xKas#T|go7SEa^KfsuD{)3p#VQz2Q|+1z@U zxBNxK+thQcXKS}+>qvb8btS1DWTdCZ(ACw2h}~>CP~ir=9S7F;c#$0qk9LE*)2Gs2 zVl^c@Fiq|Rb^t`Z$-ANV=$}E0)F$x-s&-JTQ8k?B?*GgJfO2qHh{t$5y%R=6MAQaG z-DrTlJQNV9{`OBzhuT>5-GhT~fOEQ++j;#JB&)lk=;d9#(0wkKX~T?kC~qhv?%-vB ze8sKXn8ajg;n=j&>2qE`bsB{5Zi&A6ZVA9oK$WdSn| z+;pDN1qc1Tg_X0Z<-n*HlxB|IatGVBBRAwfBEdQfk+zM)VoZV?*>6#JTCD2%s&KkO zz1mhUui{m3&ObH;3m4ZQw_(=q4}dV!RW<*!o!>69nqp+Li0DL78tLg#U5ek<5ch1F0PWKH8TCJh8t=U=$N@g z(MuI0Rzr>TGs1|?ZObdLERVTTdduTG^8=j{vlfNB@Yd_|g|bGA!iJ{erOAaoCm9f!z@P3h(#z0$r>ctn zrhc}2_;HBv&Yx6qkqb=V-pDE_;Hc?(IY~Qt{Mp#tl$BM?sI8>{E`D^joF{d3V4&k~ zT)Aj8G_=$W4KFa(NXBYF;=G`v8x~xv(*(gkd1hIVYe{$m<`wwd84MtBqyJJC6@300 zjS4>BdyERD5WYqQ2^qhkf`0O@?6SxAb|t_}v=X0Bsw2#@Qpi6s&>MdaOIpM3^3)Fe zDT%;J>6o-QMFoYhVhIBLeO4X0Xt1(Gq@*ZKVGK>`4xR7cQ&qG7M8csi14hNLR2T^P zeK>5P(+yytTT&BRvESTVY-M3(#h@5h2Q#lW>oQ(GJ2sB^{8wj%K69@-R_+^k03%<% zI|03ULf1zD+-GE0V%L|aTs(d81h*4> z7Nd9Ha}6Ij4Omy4ub@TxrIfTyH&-ubKN~WJd<8wP4z~7 zLBW9)vd%Q09XCE=>z10ZzQrRA&R3M076G!H2+!3o`(IcVC}8pViFh#!^qC7TE_$NzYCTIiqKD zG4*fO&DKTER$@GFu1*+o8TjS=NlQ%~K%D?v#-bvOm{skKvNCF@Y4t|~3k!=wUK*E9{KyO!ylh*QM-a;SnJ$ou)MO`}V@lbXtwZ+o7Vm+88`%XW z9!(#(yB4Qe)26|%b6Ie=a$wcICNMOV0jSM^6CdwK;;OlZWm7292*C}=R4F`Rp&P~* zvK)d-2?`3LW(%Oz*uvkd9V~@#CdDa$nS;tA>NXFntzIb9xaI4;0`*4p{ITh+gSE5r z+0oIyym#;4ztz@?*-u15Qkf5(Yub4%%HA;52#np|@Kp9&w{MpKNht=d7Pk4t0x4$L#3uD-zt4l( z9no%!q8fi7x6XtB`)L|mwjY=q!HpSTODX z>m5o4qets$|II%C-vC1~L-*;>{vqzB!YenwlHD-=xracSA=12x`fCANO-fDH$AP;sy8sRlQEAn)gnY_CW%9-*n~NTGA$IRmb^7xq864}7pm z*%*M2)yX6dmE&w^`$0;=jmQ&h#FgW~FYaR?Bp~>$&Q^akt_evIaf^0wX_Nz!pz3ND z_Vd>-{iUx#hY@Q^H-XpkDO^z-8yl)HArIrJ>0=NDk&#naj=Qe<4V-M6+`#1z?p99WCF*j!An;`^PG#a8W zqM*I3vOH{Tp>^KiKF92A&x`FUA{*A6%F6MCSI{KEkRLzjXuMDLP(Q)J!3obC#&4gT z9Nl=LMmJ7QPJO4d_r2$kh{LU^7)8a_iy{0 zM~LfD>d}j`r?v**xfpiEQ-gwK=Hx`h2O)D>6DW{l={Cokf1;3KW*)9HAM?wh5Na-&$e;S>ba5!9h zTWK>71*5-&o6a*ZHl^~_u5(6v000Xd_yIJ1e)06AGf}`!KjgUgT1RUCxOaK$_pe{U zpPg=t@a4fnDZU#j-P5eHf@cKK=%Wlm?v!DFAdHY9Xd$@$(k70AcEd-ow& zDS#&AKK2fj9PL6>xM|&P{*>0$pB~G_ad}^!l5E$_T7zysAbbp61NX5}U7vHE+^-9G z^d-Rd{Lsw*K8=3pi-9!JPyU2yoVeb4quAKkyfg$sw1flm*T+@ic-K4`+y|TrCK1HM z#2p37wRegick4WAAQN%rqP;$n01+gkJ~}iILt)|MWa8(K2T^3uN`MqCtQ@IxvB9Mk z>r1AbW7y0qzz#NA>52lN$zP8|xG)zpBRFX<{X#?iiQ7&3Q~cWX7mI{CDL>^A7@ea+ zGZ5NKIL0}!clQ72G6Jk?H!efz`R|Kauq~HFM@1dC+KRVJlaj!d8QH7tRw*11J7I&I z`Sf6Z>`UP8Xe=}8?_WA8^BxE#=XHH}^a(q78E@eF6KhfRX9Y_B{q*81R1K*Y;wWLO zzJI^JMVkf(w%Cm0h(ce=Gvw#B9#cOp~AzK4@-tl6^;vNP{9<@cV> z()GT-zq(vzy1w(B@8^E*=f3af@y;#VZde(3PSoQH%RD#8Gl5OC!(Dl4t~`8SspQ<1 zKp)01Q5y*sodAeZN~Pu7X+zR0A|e8D^saNZL(Of^K^WQcXZ$-c`!9g~_cyq3p(`PI zgu{OE3?r}V0bOd;ekp!vgG2CDZ|AOVseXKJtG4v|$FhA)V*auNo;ot|gs?gx?50AF zCt%p|!OlXYQDVEk`=hH%k2q?XKBbc*?OWmVLeL^CGWK$=Ozc9ggQcY<5K+C0`r2nw z3JW`2Wcu4^8uCeVbG1=~w4~nZDJN#D;T4~ZwWUZZm;cGBz7)NP9fz!Oa&&JX?e0+SCtK>EZwkkz|&4-I1@ws@+4N_GqemA2-_VKZU6PZJY z$7k!(;N}J4Y^0qCPXKsiHx{lxHCl89M`mym`P^WKea^^X2IeYYD~yzW7YrxnlA>am zm|y_d6i6%Qar}!QHu2bJ^1jHmoknf!=e4yNIR`HvhHw&A4V$yrINdjF7aASy-(zNu z`K+ZUsF{-uK4s9`yEg(i=jZ1cy=H7Ck>`v*SLwY)%^f~2e0v9~*Tpz+gDu1l8p-%t zw>Lf3?^bJ5R0+sOPoMhEr^B?SLAHdDIaI(=2Pw1~de;dqt`|LF+s0X>q|uErqJCA} zGQReHVG4l^!d4^v)DJTpp~*z~07a+JxSti%lYcDblQP6h&pAyS!eA7Z0F7|bS9mXAQc(9+r>31cdXz8;-$FhXFx3`|PzJP&gQuU@^HwY_A=>pE;_ zrR(&L7zjcDBZ)^n4wDxL4veg9Z--Nn9+d}zPaORI>G@i^C~-bQbo8G05SM{kaaR-f z!d+QAAHzsx%)sACxs(=}7l82HrwIfCDK%A_@|_CfE4hR%7hciJnS&sdB1g=i62;7P z2-7uxA>(DZs8tSyDyadbjhCN)2b0=SFY#r~`n59YUr@(H#O=>8_jZ2_eP#fG6b{zp zvM>`*PZ!GwJ$ERioz53j5fkqr19vu*^0DTYm5epp9oF(FYEf ztew-OSl>yZ{FP!i@&yMwL1cgq=Nawp+q3;Wm|Bc5KU=KgL>-|9RHsp5Aym)cDDH{+ zT3XSu>A!1 zQisYEXM5LX@?N3b8!^BeiXdQk+=#h(T3cUt1G1{~B;1;S5OEGx+J#!@$ApEI4b_A} z%4(;kz9W}V>GJL3)r45dh&OM}K*=QBYP1f2{J1|yCEc0s?Gf+TSSBj6vwN;LOHN3O zZJvZ(5|?k?Vs)i$^f2MEx8%Mq^78S#DjoDggAW+=XLY)xjsQ0yfEf;e+3P->Jqat;AG-(9jHdd=7kH36-y` z=C$#usi`LG_Xe{_ljRkaWLR~uZU2PKWm4knv^1(-*UjuG1U=pkL+WcDWgcQ>z0y*6 z${3gULM2kf?RSgsO*mO{ZQE%+K4X(^B}hltG}KtP=|iJFV%ESVhz#y2b{@1Vf-M1m zwENnf;9g$tLA_C+tgNi;BRWd}iVKsC1$ziCp>b+FaMBT=QHup?uivYzrrZg7i_A#l zfj$}{40rNps@QR2`b}Gq2^;1>W>O_cJrbC~7y%tDuc#n*=QP;@Wtt{ZymsxgDBKYX z+YT}w``#oTSf4_Onl~n8W_}zK65|hV&_&LZtJuRzce4MG;iN?s-KZl|km^<#i+bk%?;GWdzZD0eY3n`fWRc!iTxj-jP=8JB8gz3+wD}`Q+24O zbL(WR@S_`{ZW5q0G^L@~sW^hB#&5NLc~K zTd4Fg-AOPH$RcDlXKojCy3V{?s*Z~t50fa5+j_VIKUscNjTHl}YR_W$^l$(#qlf(v zfqthbw>fONl(^8T*7qNU+Hw-o zN}5BvR_A74PUz|f!_q!A9ZM#-TTtaeza|4B(*N-+KME9_=_tAvlVc__=q%cGt9{A| zcuwxqtRl#%9zJ%g!fDhg^{NK_yUgkz0Lrm?xDB-T>lzxBZE|*-@bD!#SM+o%fh{GeCrSYBM}~b7#Qfu5*l~q`;)2rtD?g- zEiEN@2C@`MuB+q8@R0}Jq@+K8`qX>x5pKkWFa7r$--Z{p#SW_qQHSJoapYhDcfJ) zL{R^ail~Ia@EfqMK7>3ijbWA+OzWY(6zd7X29Y0!RN2ahS?am|M=Al_pRO^tcr zuj8|{_%E+OXfClECXBRlT@C@$1|=erw5!{Ug?7)Lrx5b3bb|Z`P$`CEGY=#9fc1YE zu*u9f6xg|QC&MRw^N;_86}o=79j8jvC7_Iq!mz-=zjm{o6>$D5Jh1%;584F5s6fax zz&fdA56UP*kES_<5w|qR?ZrLQgZ@L9t$XP)Cs_kGVzsX&0Vp~lGDgN6S%a<#3SvfA zG(R-Usi%#2@}vP$lgc2CuPx2oZ5sh80IDt{K_b7?wBxe1XLwRhED#4Eu!2y=Af6Xe z|2n3W4&6uj`TEww+2A3b;p3w@-8*eEj;~;ycd)t+Y#Ss_^m_ENJp;_wk)P42 z6;!nL=z!-y3cwJMI`SQCm;3Po-?8e~+B^JWu#K9u>u^tTR?W3Kv z^atgnVA9?<8zz5{6M>S+t!O)C5$YnPG(o&T>5K1oJx#u}za%sBF-*E{`{U3~(hpN* z`yUGR`7(^?e>tyhxn9@z?%f+(guMEX^&DFO4a@OvM=Z8*VAsfK!*1Buc#yqsRYd#8 z19Upk0|p8a#PwmJ*BKeGYwJS?c9lIlZ}kfAg@^vtE3@B@RcF^`e}BKmM5=4t;f0&o25$al`zZ z=zO((B=3~#Sc?2qSD%CXJL3(>I`;L?Psg3Cz7nqaV5VcO(v5&vm(t01J>5D18G;2+ zzm|{uU9I@(6Z!X&2C%nwf9WJQ_b$>NX6V+l!O^jAgGa^|U7K6wt-D(f?IH2n)tOzwA#h(KGZ=6&hgn)02TR?pOC>;+JD_~K{3a;+CPeNo@s|(jP;nA_w zIrH&sEA5{&f*?2hk@|rwbjU#WfC+T8^|6w55|OZJ85R@#mjBrr1}j3K!yVLuuE}{{ z$vtqx0LDl`%~MWCekK_-MSuhL?Cvwo@Te%}lvk+qbU_Xdb8r^l_FxC&hhjfjMJJ%x zy`g;%QeoPC9uBR$%2NI-X0WEC?+b%JV+S&Bsno);GT;5%;S4?gLk2*7nR3H1sLO4L zLD^G{5qa?Ci{)TP=LVSdgVEoGgj`JPanhGQ%RE>ESo87`VY#!(tL^h>i(4cI$CJQz z`de5iTF-#QxX#t^tZc5$5V-QZy%DfD!z|n?b`rWs-ZN*OgJ3zzYGq?%Q(T+>iSpMf zHF``@(JD^H_x}A~uU<8(KLb4a0@Npyu^xHe?i+jFSAK7


KL?M-%Hnx+PTq`@ki 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/meshimportmesh.png b/doc/salome/gui/SMESH/images/meshimportmesh.png new file mode 100755 index 0000000000000000000000000000000000000000..f87250bf462ad954dd984e40951c37f991a3950f GIT binary patch literal 19532 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 D+8gi4 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/meshtopass.png b/doc/salome/gui/SMESH/images/meshtopass.png new file mode 100755 index 0000000000000000000000000000000000000000..044c0164b31988ad8fc99718146eacf20583d12a GIT binary patch literal 16356 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/meshtrianglemergeelem1.png b/doc/salome/gui/SMESH/images/meshtrianglemergeelem1.png new file mode 100755 index 0000000000000000000000000000000000000000..0f9bd5215bd8f9109e315a1cbb2eae9bf3931501 GIT binary patch literal 2921 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 Tlu}bb00000NkvXXu0mjfMoXAF literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/movenodes.png b/doc/salome/gui/SMESH/images/movenodes.png new file mode 100755 index 0000000000000000000000000000000000000000..16e9e6262524af0750c058276f25d2199fad8c63 GIT binary patch literal 10486 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 KRE>nmkN*Su?S)AI literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/moving_nodes2.png b/doc/salome/gui/SMESH/images/moving_nodes2.png new file mode 100755 index 0000000000000000000000000000000000000000..b65e57ae97af9cf397aa8493ce51039f5b581ab8 GIT binary patch literal 20232 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 literal 0 HcmV?d00001 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 index 0000000000000000000000000000000000000000..846fa2c3efb7cdcc61742c72d6fe30cdae130c36 GIT binary patch literal 11539 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 C#P#d| literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/orientaation1.png b/doc/salome/gui/SMESH/images/orientaation1.png new file mode 100755 index 0000000000000000000000000000000000000000..c23b0b8a821510992f5c43f18bec265e833f1007 GIT binary patch literal 14549 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 PMTo4VqD0v%egFRl>8b^? literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/patternmapping1.png b/doc/salome/gui/SMESH/images/patternmapping1.png new file mode 100755 index 0000000000000000000000000000000000000000..14daae1879b3b6761bbc41d097efa5f6ab796752 GIT binary patch literal 17945 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/patternmapping2.png b/doc/salome/gui/SMESH/images/patternmapping2.png new file mode 100755 index 0000000000000000000000000000000000000000..fbcf35544f94ec5c8a80a8e8cd8129fcc2644015 GIT binary patch literal 19946 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

wBfJ>BmS9}6@HxOM+4QMXmj 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 Yp@q;r)&+j>)j){2h>UQdpsx4-1#gU+V*mgE literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/projection_2d.png b/doc/salome/gui/SMESH/images/projection_2d.png new file mode 100644 index 0000000000000000000000000000000000000000..91d446b5c89ef390eec41565793764ffa91deaf1 GIT binary patch literal 17347 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 ZOc(p9!-*IQz(41JhzrXI6$|Qq{6BsoSxo={ literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/projection_3d.png b/doc/salome/gui/SMESH/images/projection_3d.png new file mode 100644 index 0000000000000000000000000000000000000000..aeffc7a48ef713648990f2b2ea58269374db37b4 GIT binary patch literal 17967 zcmch<1yoh-+BLipR6r0ZX;8YmTO_0fq`O198ze-!q)X}UP66re?(XjTZXVD1-*cY# z{O|bxZ+zo(42NrM_Fk@iult(Uob#Fs|Bq54i166(5C{ZO^n;)*1OkN#{%XQL1FuAl zj3_}MZy=(A?>;H{?#(&5qS{^mIvOC}3ZA8;@%xUW7?zqrxVG8%Gb5w;={u#PCmhkb zQ0kQ5-UO(qy+V7Zpd_gE)Hu*ni~@Gf_vx(+R1J(^_S2HthGEvOgV4dBio@SoDar?K z&aBzG9MWA@-;?^hN_`SBBS`hM$nGiK?cJT^h>l{aoqcmyUQv89 zTpd$f_dQN3xma8etW07&7ilOxIx*JM-mbMAjE&*O9K*5mkFZt)T=w@*H0f@*y3A71 z+ZGlUn4PC(C1$%>eKp|T<|a#ZwJApiOLYn5t^Sk=!jx1&ASFANpxs0?$Fz_Z&ZV#9 za6r=w3*Bh&p(UaUOo*$gdi}AN#+p?48|BY2N=$@xP5xk=->u4_c{Z$4V!WI*b9-M;~x%pY|d8K*0t#|2aTB7xwuxAm%YlQLL*6$(wcp#;%G60$5Fq`=`3{PJ>6;* z&3eDFyZXB?UkwdSB9^!bR;De{ZZKOL|6+pm$Jl0PPtV476cuKWFgG{%ph?B*#)i#W zH#!8H)#zJ70#$Ii^YO7{y84(7y-MiZVWVp~HjT3z?L?7gs}Z9-yZyU;@=lU|DXC2~ zp|?a-2j{Y^$zE1NtBZv_KcbdW5=Vo6Yklfua10Bj`r4~$eM*1@D~E*!NuV zTf77mwv)ihS9p~IR5pv*#p~c5X5(R>Ov!|$?d<^Jw6_ak(o*)UhW)oKH8vYgKZd+V z3)~3$&`@KTj;n1e@+bSFuyM%4xzL0dQX0BCyP@UYeeOay2^*364WkCwM3%#Ai*s3d^X4WSSe62eRRPlP@gn6FpwxpAjx9vxD+A%>$C4`^e z5#Sh4t&;Ng#miI;MQ-BnzO$Di^+z zGyTc$G_MyFKZSNA6z}kxWVBV1d=*Zkr_V=BB5?PtcO`n}?Js{M!r^wW;#;Y%v~-sn zgc;>F>uZO^=CJX_*&H+IO0CI02`ut(zA}?5;e@jKL0Oy`M~ZXu_1VtIr8{Cy%yCU@ zvM!7L$$FphbU6iSq`ye=b>f|-FuHQ%fw<;LlLrzp6H}zk#(+$b22WrK6xg)zh#zes zaZ~FsKYnP*N|0x!62%gf)#VnkIQ4Nj?kd_7sPqvb5u}USpn9k^_IsS)b`FiOeT)x& zw=(2Y#)&B9M7yeH?%Dj^qNjvL`|RfK8z!p7k(*FG+FZDFG)aQ};jq!PKO3FZrnG&n_&h8svMBjZ{<~@! zNg%eh_t$h|{FTYjIwPlB)&5zdfr@Dhey$S~=Qm79ozOO;+~UpM-^0~y=VZLOj`uv= z*ABaEug^|1-SHH^UUDlUWod0*{cgSvZ+e)fVM`ySEqs}C}vLu>Ue$+VrY`xU7T>^^CATcckH}q z-0<6b(3g@xuu%-E%6Wmb0MrTU_;gwr@m$OF8ZjoxrkCER<=wT|T}GGGULU(^#!8NgeP6=ivxuV<3f$jjgJ8^65^jgm0m+T$onr z2~?!hw4N+~$sVWdOLeEzd;EKc8jfdoNo2_4Vs!;>J%yT%yX&mv}J`cJ`N7tWMuvj_bqz!^Ml7teJ>Rew#H8>xR=TmTVInhzA96M?+5=q1} z`?v31Karu=}t=9=R zdx<(RWKLdqhU`uqFWHMeKg5S~GE)I4KkEFIiJ3lb&*U14f!O06~`qcG3L zx}~ej)u~3?jfkVoo$N&iD<*=;E@-glSqD^gP)aN}$h29S!ZK)yiHY4oh}ku*x1aNV zSW-2wZXTGzqfTGL@&;R!>K~9Y+TtCMe`WD)LX`_MJ;$y8waNElzICH>Y;o52pw*<)MR(W;jy2S3Z8;8@X0EcUxGH z5PTl7n?*yY>eC)`6~0fQh~mk9Bm>Y|^zrOR3%o%dc}(wV1_WkXO*lP`>(e~`TBKPy*6t3elDaCk~v6ATt!aJ_Az$1&j;>pmK zo3p!%g^}(D`Lh$;yFHJOGzsJScZN(ywph+8#*zLi`?L_fwb+jmq~$6! z{j{{J^PTb!!BMYooTXT&I5;qmEgtrfZfBsF;V~r-cXvdTICiul!{>rdC%C<&Rr-JcKeQ)O8^bvoJLsHsAdYW^JA z<+D8f;qLbIYKI&B8iq_d`G;sEDa_NS;cj=_JZ=f}RQ4EKO}CMm8fTMbZit!|Q_p^R zLP0yawB-Omno)X~8>qk0pk^RQf!X+4ZmbdN&ePy@(#OW(R#-RI`1&BF!X0g%E^X+W z+#V~Wx~^{IviW9IzyIFe`=wb!wY8@B^_j^R-ix=5^G=z9K`R}hF?klgp+)2=3$$BK z*`mc_}9B~h@F4dne=Zt=jjXf30BRbQO@=tlc zGzoUNkPhF;#d{+(C5{_pG%clGw@`v~nSW*cO8@A^@LEm2 z#r6h1Qhr9N++fDPDSm-{;hMha_+A?;XkBW3Ec3+;8UApx)CUi%ja0uE~s zpWU`-QmtLwZ98QmH}=u=t=@VATZ(H2>puPkgVj1^;%BFb7{kR~3pS-nQ>+8C>bZ^j z`Wdo*jo`VyfT%or4nEJiIxYh0g*NZd&C9(Dg!{WC%hD5(rKSDe`izIA+b>98F4#Tp zxgYKiGf>P51bClm4Q->f3yx~9ER$O!?5}PlIFcC9#Psj3R$SH5oL7|JD{ps9Eojiy zXkH0}_53*xIIt!#%jc#bC0`HQU*{v1@@Wq!Wb85g|n2rem{k zOnJ2MPSR$1BEj~;F4erjIbFTllb7r{8yg!WInI4@*_nfb10X-XV=?lz8j;9=8r_i% zIZY*K*QAkf!A~^n_tNh7ixM_k%NQuCYpbpA+Rqqu-w(~oSlYioy0~DwTfdHhC%|;M z)V~pTd`?4i+^B!Z`1SO&_>2K<(4`Gh{Mom)n7uR^G+z~sxz2%F9|pdJuX`zN8B*e> zZ0<|PM|2;{`(uNgn2l}_Xe$z+!>$*$s>eUSZ#^fvBsqFo@6E?zu`&MnF1SpMqvo|x zTB}iKhDHzU>^5KTnPwBo$%UJd?LOv-P4?OqaYe$jL-FMoqZT~bqm@rcBg6BuSi{ab zLXB(-$pfOV&HNT+>uSatqsRHg?~2PcJ#dx9%-0X9*>-W257~6~oEm>cQ%AqX#|2j2WBVY8eI*n>GFOMB!`Qm`tnwfI6<`@9S4zLJyaJ zy!1gz>KbajF`m3vwlBo}{XTf7lh4#@U}TF~0)MGB(8K+Eo?=n4#R6|)Qj+m_ew;It z+83`pezK4h{xo@5ScKnNwmRn>54yU`6n^crk}HYmMhPsR&)X%{vjPaPo^v>!qLiF$ zoQQWf8Be;it7NIv$ovq=*`*A#76fTm0FFn z&>f+Uh6X+;yjuYEiF_W((-ogbDn2WkEGYV&EhOvhMWYHytz*z*OR9YsNR=-GpEnM< z>&W1%w%tOxy1F6{5O8+?J=(KjXw9g)(!$_Bf`qy5q~7bpmxpOd0ToyZXi z;AL}^oNtDWBuY@M(fO>go}mpi^HYS)0wR$F-|CgNJ#*mQMuHFtHvSy)(bI_w82 zZ1lGOmUF$ldN*7YUEfn_w7X-nODc(-He^(7wek#H_v-3uSX7j+LSBYY;A`&t%M~NL ze$&f+!`B5;CD?V<(^nK1^Jt>q;!}l2I0Y|^#YYRce!UQ;)kd-Z zA5M})oF}hrl&y=K|8BcESxEa{cNC(Q^g zpI7#B%T`NG#El=(@4!pYZ3jXlP)0B2=W6@d_5|Xg>xg}_U)FOsh^?a7cnwY8lZd?a zDNc8!9fH~{x26<^m9c8G=_-J+$-_=S(Dr$S{*gN-7BxuNCXY1Ydl0(7Y|V1bZ`YT? zS+N8TitkQzH=yZ_kJI5hPy}XO0ya<(V>cu@3%sOUHbf2FcU?8GnBu}^BF6-Ye6p1T zHX>Bzh}Xt{v{y#bM+;M$|7v?N#Y#u#ldS>2fkO0DjyTwQ=S#ePsMdN%|3=i$NUOXT zB_$;i@!W89(kByL3my+{b~PZ<3%xCKEB!Q;9RgcR&~G4*0+%Qh%kdwV;@E)S-s+zolt0| zU33yT(N{)uAebGY9qiL;mOYotftVseA7chsC-1*I9jwp8Jb#WlNaa~PNG~fZYpPN8 zYebq)ecui~FgUoNT&WFj(!+Bw?Bf&YCtLdq4V{(yuSG>gPdDeifBbp_UcB0$IT)?< zN|84DK<;*Ps=pUsAwMZ+RYj33j^^RvA(zDJ(Qp=qjjGCfV-rUd>}5l%&+ro4XT67R z?4mMAOQpiJEoWri58h&-G09=x-OtQ_CV*NO_zor&83h^?(-meNN2nb=8iy}09Zn2~ zmW6D$N8!Aif5kBw8qL+(WwaFq=|;xI`2!$VDTpp>N+jXtPJHjzCo~8D;996w(-KHm z-?{kK8;jZKqwfvvzL`d{#wpHKM!dNBZT;c-3N~7X5lP!{Z)j4H1~OygHD!BOWM5H7 zsNz5cSf*d>j`R>V3v@fqhfz6_@hYK#WF8KOeO#@3KOUQQ34!+lQ)PxoIXO8#etxK! zuRc5+-lu0~=I&IOIMs!@Iy-Z=etk(q|0WD9;7hz(^*eeRn&50G8JK4;n{Ac66vLimn%ci2izXBGP*6~ehFa7f z*!lQUM7Vgm9cCI^7Zy^sMzWan4qrvs6Eip-YU$|chy^2~qPAuarG1zV|Lx`bB9_%I zewx+o+P3A!FS4A-{|sk5ZDi|%ghaYRfl3A`?B^L~Oax|&`NV<+Q~fS7@z}fdUD+F^ zr!?5=`4??3!X!JT>iYSF<9Gc((=s`^f)~jxH~#3pRYytd|?Qc&&NKg zMgIyHH|XsGzxOjlN51jfP*oW;ux44bRR zOpId_E*HD{N6T%VS4H;9`DSu5Xf3U+P=`lHOUrG68SSym#wg*);k(lff%16@C7^}z zUUocRo6cGeAixp7(ce@0Zm`3q`nXdpn(kP4*z&7#=u!=+lEs0YvC+*d!)AO;ypF;7 z))Up|bdV8s0-dHrJ zGpLj5>gvhHtfzO(*i+@kkt*(G#if}(Yd?pKEUm3eDJmUaSk$XJqN1bwYGUvuRB1ED zjZU*%`36K|@Ucc$n(ZkmErVtrP9#EINx)~XhNllN!yRJ;(ZI)QbFs-{peG#M?v5mt zu1&%%)bz_!gzBuZ4}PJn47p8C>TAP2A4k)ur7~j2ikEu;s=?EDq)_$L` z%w|5TwC5rq@Z=el;yU$SOogt@q(3Uzs9i)vgwaT)WKNHIgL4!B0LEoHA~7=zmI1|` z=;N{4jQZnbxgEpQ>m1Oh3M z&~V;)hX&u}wuEtojFc3GiRUY)-S(?jn7;xB6ta&3EoO$@mAPK~HgN9A+wV>LCM4iI z5|kvTgTYdL@n5cSwfcF{MreqfNg+$EeoT&?S_$rzsm>?Ir-VE_c%HxaM5(VWmy*aZ zR~DP~w$Em(tcYS-T5FPHM0N^PIfk;3*p816B_;GMKE9GRUFbjeNY>sN3dKEU`2rXR z{?08XAKqQp{tW1l3MyU{7iqijg%EY1!mCuH7W)nKt@g*!wyJhbhtHfnRlC-nm=_L? zeNKPhsE_v=yIu4C7^BWY1XiXJMgFO&ori1vb*=c%$kH!d4!K1mwCP7}@oVK9aa?l} zHEvBiE`Da>u-fW1s1i%YQcDw>`BwpC2^Si~TA^^!CZiaokEBqJV z_#Y12wc*wiEE=18M)Ep|a1K};bp4Uv?i;)mr?5Vzg$;LpI=7RgB-I4B0U9Pu49LqGrP{5}Xw~X1J9ZQ=dqQwnO^YWL21`J_*8^e!d2EAK3{sNxB;Db=GaV7q zy%}8B7YCXKd&y4%QeR`k*oL`HJh?_vg|YSCkUMDv|6tPe>g&xj@} zQ8;du-3nROf3K#dMjid}ALmS=zVm5txp=(h@qG2x>56r0MD(t6flqAqe9uqLCN!BW z7x~W#CI=etZZ4M|+IUS5(3N;x%n?ttO}!aK+s{M$9NIZvp@)|0IVepuH~M zjq-WrkWok53}o^$>T-_;m|9Il9uUI)&qcLg+cTPK-C0%ZOM-s))z;~QS5EtC!dz-@ z7n&%nHrroxp9oI)pNA`hFeA4=*Xs{&UkLG1-7cEH6+BxWgh?ASxjO0~xLWcfz^$3W zK4^Nlqf6p)$ON0d{PRQzSW$Vq7_s8<4wVWMdF7@`^Et7b^S!Of5+XcK+c$6DzB9A2 zu}PE5lCs^OjiXhsJsj}3FYCT`s-8)m1=wN9$^AY} zQg3Kz5R;@jZb}aFkg$sUlU?>Xcpq+UT;1FlFcA{Dol0d_a1fpa4)9e*HQYF6)jAyX zgZ2tKbt0!-fcac)4wCPLNyYYx!pO)77Q5w}Kd7##A9FzYlJEKBo;07WZmvA2j4}cw zT)(3q&lIp@FrQ+y+x}EhV5uCTpF*oUnk`d)Xx_X|lW=8wmDL-^BcfjUgIaVrg!nbJ znwE{e*Y-xo>|lVH5K5@X<$(=Z*ER@ikfoG+C*O3?Tph5vsx_+ z0=3x-N^;=pWMgYA4+E_1uZfA6`g(2%SW&@+Mz^iOpU~j0RI)o)jEi_W%scskA1vv6Mhjpm?+@|ju8OzNe9k{)9 z-EVrhmyP*6S^W0lvV-q(Gc8oitSAT9JuOK%ZRud-p+9lT1{MLHdN>-4Lt+_pt6i@c zRg$7@nv&&aDD$XAC7I1<**WcZKYaZ7N?ThSfq+-7Adw!tCLDs>buz#=aJ<%o#pmwo zzwDUNH88LN_Sc3tQttp$$hU8AI632o(nKP|!@o!w-elTwY%aH3E>U!wt=ob!09(T%Gkbiuvws4s!7XHG;&=37X}vmfFyw72Io z7TeB`y8!HfwNSo${;UzJ_1-u_D?bD**+16|zV^n=LDL36K`t))-QwE(>Vob@%2y}O z2m_(68Z^*P!oZqkWsyPh_%zki^+cV}zLPj@WyC;ilp~~)IOXd{E{ewsR7YyGjxCm8I;Bv8_uUhreljZaHV1X)IMFD`7?Q(5U z5(+yX&vvKe3Rt4T!+)9=IULNp9(R##TSsTU9lti}0}E+9oDK&8I7@XTlB2aSUZ@_} z)YNocQ*d{^m6b9Yt6F8g2C$3Pt_JJ?CQwTnPHX51*XnZYwlH$_#2?=IPd*tM8ruGd zxmYowQC7X56it%j&wI6s+8&JK2L`{iw6tKHqh_XBtOW(`j{g1a)o7u*YSKES{$kz* z0iQe8`D}Zr&cPxN&SR;?m;0obiCUu`6A1~){$M^BoFMQu&2mPJ#xhvU_eB#UnUXlH zX49Vvc~zJ!=DD5EcSV8dfqn6UYFMN|p$E`uAYb0ed?(brFR#!9pVgVEGMOwv60yw_M*Sn_khbrCd8WovhL=l@1hf4a)^!)o(IXbD!3q{ZZt{i8GF=ES?- z3(exKhR2P4Pjtj^fX4bC*jyo@yj)1`F1aQ;^7v!Fc}=77X-xeUOQJ+LFqepkFtss4 z;#2*PZC1+_P=bnau4=u)DE^BgW_}P@Tienv=^M|&g_nsX#*}HvRQ3z3_i#4wqulnd zo&c>Ydzdyo-2Sa3N5O!#cr65d-Q}xz50>MyJYTDz~&wmB`7-ISR8G z)+!5^Q|S2QL>C~qQH4tXy>;~Aq2)_oyeGXRq$sGUP&P@+7@CgA1yVgf-g)CrwP6=H zT01!#JQrn66~N{6IyyY8R{t;?CJk<#n0lf6-E}?3jif@MlCsH706Nv?R2tbAs4v`O z2NY)~LIkv_7AcK@Xv#&R|0@333cHEU4=@G@Qz5ahm7upNTl5mLv&RCTr$4Dq9f^yF zCrSIgA2M()0EY!&mOFUA&?hEN%czcmE>A+{baT4j3fKpzk>ED{=_(7&)PBn^4jT z0d>{us!RI0QK>Zui%F?O=P87NfguQ+2Oii&A$VNv>Hd+E*L~yNoCpqx;$1@D0&*i@ z%FYrBcBjhxK)X%=WpxmtbGEcxnn<0fBDtybDgw3eQLW(v6ow&()#9X zL`2Zi($WwGkH%WTFQ-0^C$~+a>Z1eDPoPJ=_8}A$6#C{n8gILV*uCD1(5Kv; zF#U^E^hV6X5^!yl0Rq0!)c3co3z z%72|Rk_8L*@|_GCuljw?G^@kDTIQ`8{LXmcBZvU)sc@fniaKzCB1+pLgB!0kA9oSb zR;k&4uVa%q+&`1Z>6Y7hvqEOBNf8hdLdwah;`T88xd>g^9{hJ1q`5%k7TZqACfwN3 zMXVC;iteu#G!xgry5t=#2vPDL=fHs~%NZf2lcp18Y%w=+^~%X1?t&EwgOT$F87dcI z45#=ch$uZva)U6fY`36i;wrkpWH>SATc5d3w4C?|n>WkmZ{RZjaUe$wUjN{QEHD}T z*IWMOuv0$Wq`NFU>wP6KLfTT>0&z=etPa9q}naPw57S(n-E=4iMgqBDBm^qWWEJhZ*pK3D2NLi zJOdl|F_%$g#DbfP2 zPmqz3g{F0NbTC<*(L}i-l!`5(Mlz-3X6BPFXpi8Ii1$7$pNyq|={4rz>9JnVI1Tlc z9$eW%;@;q0O-xjj8obmkJU}}4xarnb?+!Nt!}El)ty?9-{knrj!o9A#NDjMgdya|T zAc?aIAUsh?CEhR+M)11bKz@+JFD)%WE-x=FkCug=@3u8a3)8kB=dSX`{(SE@Tx7uq zj7YI^tbdl5s(+<)w0p~ZgUeL0HuUH5LhZfj3ZPcNjDJ)gO{nDaLLT(vKFwWatOyN7 z0^P}R_TmV|4C)J1zDk9dTS`PkYNM2-WCjpD!20n{3AtSjYgAy1Q1c<0vvWA^PvVN9 z@JMK>t=Jg^wQV{T5%r(~_v<$tYK`+5rEpp}fI~$q=>s?Lfd&rd=EvPXIuM$|Uf5VD zm-SLSh6XrZk1&N*W=X9bM~txq>o5l^JgL}xN0VTH*WNQC9uZVb1@?0oG1d}!gqBIR z7co(n&}5|RRLQe4L+kLYDY!7?pkmYm7UUQ!U3R zgz{^Tb2Q?kpg#D)r?xy^co`YcAfKNTykRE({>ziU_QrvXm32Hkfo|ki_Ltq+nzBwq zK%7>_jEkbV6!iCJ4h{WQR#vT@E6EZ=AGnK+Mfu z|0tur!WR%AW4&`#a}6I@URn147DVpA7fqwC@Usz(6&S~+GnI%K7%|{Xu^G-|5qg3` z;Kr!c*#`>;V?+HIGclg4t(XP^Ld?;T9W={RqyuRalica?T>U&kD==M9OgCE(iUU%; z)NlZQczF05_A4PR{x`sde@jP)8@22nC{nzJ40K&7~Q~(|M&W(Le2w96O>k1IS(9ts0MJXWzaHu zF@0|Us|f}wIy^Sk$gTk}c4Tbq?s|uHhMT^rM=uHVlqGU~k{B=4CV^QBKaI@f|7dSR zc5fDVqp6jj{PN6(>WyRS$czn09W2u1JG-0baZv_#Dg+-Ne|zIk{eQpaWg;pYbwmzF z{@vDrJkAwVeaXH)kYXVhw0uY2JM9b%=2XDC!Q`EBgJ$NuhOx5~w7J#;?<4c2VBlbb zeSEmHY{;kAU}T%qy`lF6wtr3!`fsX!fPi4t836w$ zBq9tfpTdUbPaD!=#_mzG=w8UA2lD-yAmU;HhlO&GqB3ZNBGyJ;$`vN)Jhc~Zz?djD zHkNQC6buT=t^>!wNTd|})0@nrYUbkBz7vGc5)a6mR5G{mnMrqI)q3$!UNCqQ%H4*M zT{#oz+%I?e_`$BbpS!)%x_|y!S5Q#c@-!=rq!2%fOc+>y4bJDKwetYoEbZ+{t@(*{ zJ3>fENPNNg7^Q^s#x}D|+R%KyUeqw9|8SUG3GuBs!xxa()>-(bJ;?0HI^90}W|}kKC!1s(Kj1s$z+H4J%b)6$;5vN2u7jYOt3|AYhMTeJy4jQm{*PS z2g&~KKmDKwP5n23R63VhUdUM*c-hg>@f;|OsMlrG8ByQS zQ&VxHwH{ID;n6;6q(%D7lG9UaYTT6@@mNzGZ5UV7ytIviT}rCg@+!AnEPtS}&%}SW zTQ5hWf*4Ci#-R<(cydr1<`n)7Ir%qWw1yDy6;@UNX#lDP1skP1na73Q<(wKI9l%3I zu%Q4xX3-`9)9X=BAixp>fCt(XYJEsfSXkH}c|=Z{M+jIGPEJmc$J|691|1kB8M0^` zxwDuJmw#{--^oZ%e}#tWqftagMHPrY=Ylph@#N9d)^7b8Wo6W(M^OVSgS8)!_W?}N zxhFT@K|=6&+QCK|;~WFY3hwDG8G{Cn7oNziB8SW3bc{xWZyIlp#ZR3Zu)!GRt4x~6 z(!s$%iEc+MvlR+3L&d<=>`hlvG3ex~R?+hE@)Da#6XrW$9$6g$YdVcQV9YV&EYA{L znBDfM|KQ-q^#-QU-CfgXh}eR4_Iufs`Xm^l%&DpS0Wgml+`pMlXhJ_Vo7}f=+-}ZG zRwGFurw0ou#&TIXX8#~L$k)9=y^K|OpkJxE;%YavehUoM1wx*+jcUHACBNWt&gXow zADkCRWiuZyXYjBq^vHL>f5rq{E8yCB78TKfo^if6ooA*}Q2D#&n-{XM6(Amftu3vu z8=O?OwzR}@=#u&&5s-3mB>>qpjaF3dK2iP@1sXhYET3PC^J)kHc`5RefP(Q!ESCfABTpcwhkY==ccp)TuAuqj zct>F~5i)wE@!`=}opq|zFT;0Kfx+$nH=vSv1S!{{v2cr+a_ipZ8(xyCIRZpD7t7rC6a7Tp*x|y4H1#*(QLq0Z9blQauQdsWP|j z4fSNPws)&=6#&OMFa!hg<&SLw726Z1L@3>W>L7*^M4oEdM@+9s@M>8K_#u#W8L??! zW`Jt4|AK0yvCub2uYd&t2-4hL9V!maPG?_?vDPTR{r;@-YMFjd^wD;?Vh>&(F{$SC%3hS&KGl8n}rSG%PGpz>Rs#wSX}T(Bl;a@;wSd%jKVE3O~&B zVllxX!s&y!M|wsEGMJM9V*40G06{Ux*47pR4rdT}1>`?CY&Spp-}9V}$`O;2=I;C# z3@RD~wcHs^r&9no3{2Hj)#*U11;d_GXC4q0dkoNkxTu_(ky3U%yIb9*^-+tEDw0zi zH3`OBO7Himy`38(D44H0d*~W^ryQS<;3e$^rzL&f#M7@86TGCV&WS3`vC^ z&s82AUR)Rg(d~1AL}o040zw8NSxiX7|3`VDc3%g9hlG()wq!>p^?y-Bsc=%sctPOE z)Y%{C03dmE%8~AmpddH*RiPx}(GdDKCJ>wT-V%z;RB|vPlXh!z7|?i4r-9(<=jV6r zbiA)8l~k)<{Qrj{?%dP^_TyTylqW`!L`4LY*2^ZOc2MZ^H1%L;*isaj(zg>QK?)uk z0vQ%CY&f$iPzVHnt{b(=WfFlO0vyunni}OfDJ3OLCd1xUFfRp9UyOhWYl05ifnUK) zqxBlRa-8z&##-9Mj+KK09g8qf%Lg5e10XY!quJCr=0+X}G#>fOB*MLGcMQNxJ^ztm zsOUR@<3m|Sg?yXA^s~UwtSA7kQF?khBrGhSq*93=^aS<7Sygo*K;Z@n>&E>JdJANANr;ILfu&z&zo){@Lv@~r z0mN@OFlm58D-^oV^VqRTNi#c7b; zxD=3Hr_V2Onx;R1QXcXMQ4ry>+2~*Ubq@{m^x4uvUkcK?hZcjdpdO5f2d5ag+u;K} zs6>CzTUp&=ZrTn!CWgxKCIU2Lkkb&bwzl?H((MQmDw;T%wHZLh#g%Ak%#d#D76){W z%}**k+O4)%M-|)!(GMTUD`?o+l^O`454ZEG4#YX^u0MtA1B(OXD@p`|{%ImzPt`db z$a);*w~^0>f@#V38jaIMBS0;o*D1!q7)(6aZU2@7nC|$XBM@~ugqy^A-KetmaR&Wg z=9QmHp36;9{_mr(R>jK-?lY-b3Q_vhZ!Ij5ztr6Lzj2Ys5kt)uzNdi``a}v4U%q}j z?G^f3F^t?tZm@c>q`?W_$ukWs0Fff$#ld6=1B1HPSEf^?`t_W9V<)$P{C%tJ|K|w(%M44I1&H=xF3xd2H z?@(j8@>&*Scj&Sum# zn=)W-YO_1ZKq{H|d)%Tj;!jjUEGTw+ydV%*PNFlBuse9du4>%C*dho8UABpY6(Cn!HO=QPl zgGAVu3*807yX&*Z+1~nHiSHw9I<#@b0>6Ztr*D8x`R>X@f;6&C-_6Z!s@{nSqUmvG z7p@PSZ>0*8sB2yl5+S#OAtMkRAzA)ALITo8g}X5AEO*c9nY(=Rt6y_kZ&8|K-E~ z?Xb_`*qQaX+>kG~0$h|VK?_aCX}>aOW@Ut~$40l!ZqJ!K)RhVUTBNRu-Rk6wW=+u1o;NBjJqiP~!J0P5_R_*wu!xewU&ztYlJH-Q@ zryV9>?D;zD!?EINztTU>PmSjSCK%h7F;*IN&FSR8D1FJ( zOlRnBWy>ZnZa>SLtlIR-pJ$20y-TN;h92_MsTwhe_A+Bm9Op`6HzSKnXv#VQ^80QGMcCOXjz>c zi4b5Y@B0zBFBYvlbO%IHJ?69JZO`mAa~GA|ZihPRuhtWoO($PLzyKPsEh}s5CtCl_ zk0_kU)u+UQo3g&8LJtW%RUIG4D_q~NNF-4p)(uVKp>54SGiH?5h|9^7KYm3d^5|=wL!1slU{bS5xG3da=#l>yfu6uC) zrx~XL*TGsthZcQyM=8I#dExc+_=*udrqM_yBGW=_7hwDJAoc;qIob#N3nkWMv2|D7 z--OeCKIUhybR_-tKB4co>qh;}pP0XYk^OJ;lnS$h0EATe~J+a1cie^Y&}EG8!A zAKooO;PE@G`Mu-8+yw|!1*Fv}3(Di>fj8Q04!*^A$v>r1T4@i~ZEksbd3_DQ&v;?~ z{0QWHw?D!6!ey0D`2N=yIItV7B?i?Xf(_qjL}3sN>`8m_X`{ z<>eNzk1p3|EOK2pmC!p(K(MHu;RF%1Mub?u(L99$*?~AcJ-x*(<9pJh?Eyty#yHb} z8Sw1Rc#$R&zkxw!tp>jq+u))u_sLCHSF_h%+LgF0P%eW#;dAzK z#h_gh_(19I=iO9AuTW5Ab*2Djp0r_TzQRI&Oiwt1s0ZGZygc~MVS}$qZA!7Odp{l{ zUV&ef09>e0g}kR)|2AIr1#&|YJbcXJrzqUi0)oDa`}_UCDP`y2VE7Mn*3TI{4kaq3 zXY3{wDpEvsE-H=5QjF{Q9*ve4 zpB5^w+_7cOEzI&x^18<7r8B;wx6}3Q(CyYbjIMPf0V*kTp_GE+*IbSw%c6S-u3P^8 z*vh9l`SpQ}ToF3`q4DG2-=ne`Cm@MUj*+7;u+lZVD49H6o7(?^yhwMFgcA%4>-%NN zMFlU>hS+!883^~)5$Xn>1TXJDu1WjXDc(Pr*CPqTx?Hb_vF0=xMmRG-SKCEgxTjE% z!;hZj_wi}I2#c(bl8`!9XpDD`xG>k+BR+U>VsA}y_Ke(e>tUWH#kvHq>kW~hiaxBDG^`cp=A=(?xva8q?LtE%x<=b!X)+E!=9 z=*|08B;YrTHY|@9pPsm&p|#j?dR>3fku?vMMjK2~7X%;Whwu38Ow_69eNFB6jF|H zj{TJATfs5Q;W=J))!Pe=KDehG%je?e$toYf(+aYVJP^=>&0P5NUI{3LB_`(gd)yOr Z{Ip{^n%89nzX%2*DkLRXD4^x_zW@bJ)Mfwx literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/image103.gif b/doc/salome/gui/SMESH/images/remove.gif old mode 100755 new mode 100644 similarity index 71% rename from doc/salome/gui/SMESH/image103.gif rename to doc/salome/gui/SMESH/images/remove.gif index f3d6951da905a11bdec0e8847d446d84edcdfe70..8b81cb25e0eab45c178f2690627b349cb199001a GIT binary patch delta 237 zcmVP@X%N7hV=b!JtCUduK_J&Vw*+qGQLN?n>2uGqF;2?)>$)+k%FTKD$#8<*r@ n!gpDQRjkn|V}p(#hx{w~B<0ElIR@CwxwGfbphIKU7!UwEB!6b^ delta 243 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 LNkvXXu0mjf!pMl; literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/remove_nodes1.png b/doc/salome/gui/SMESH/images/remove_nodes1.png new file mode 100755 index 0000000000000000000000000000000000000000..94caae6797fd6bbcc8e2e612ba0a5a2d7acf48f2 GIT binary patch literal 11701 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 XaHZ~8$1LkQHsGG2#huT$AIAM3>-}@D literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/remove_nodes2.png b/doc/salome/gui/SMESH/images/remove_nodes2.png new file mode 100755 index 0000000000000000000000000000000000000000..e9f806402d8837566592d4aa849fb92854d2b7fa GIT binary patch literal 13889 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

6<^=v25|YN&ON^QdL}0B;E#zJ+4My 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 G3;rMba4Q7> literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/removenodes.png b/doc/salome/gui/SMESH/images/removenodes.png new file mode 100755 index 0000000000000000000000000000000000000000..cfcb777c64a560e841a227420619952b59b5303e GIT binary patch literal 9095 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ⅈL;z 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 i;i-#l7K8^_oRII2|NIA4QypRe literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/renumbernodes.png b/doc/salome/gui/SMESH/images/renumbernodes.png new file mode 100755 index 0000000000000000000000000000000000000000..90a0eda1335a2ee699e41a932935863f26d68368 GIT binary patch literal 9279 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/revolution1.png b/doc/salome/gui/SMESH/images/revolution1.png new file mode 100755 index 0000000000000000000000000000000000000000..0334e3b7eb986770f0343da932fba5443a8bb9b5 GIT binary patch literal 21827 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

QOyS@v`ZeK!xqdSj2ixMZKbH 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/revolution2.png b/doc/salome/gui/SMESH/images/revolution2.png new file mode 100755 index 0000000000000000000000000000000000000000..5612f9106b9f3eacc81ea3a5d9669460460bbaf9 GIT binary patch literal 21898 zcmb4r1z1#X{_h|H(x4(p3nbI-ErUX zx4U=uAA9%uJUlW7X6DQ}@Av!t)Jvd}!gG8aavTT*g8xERN(BNz`vSiDZefBWo+h8S zAP`!}3#q5CO?@_yt{$%sYp-_^-(K7bvY2~zTjI;(-&r5ah<-nQ^s4FhtvEJ=)!{6q zFQ#baW!TAN4cX<5+0VvOfBgD!8yovZ>`%7uteu26?;iY+4nX61=6&;4NB6~5!2RM^ zWf2|SH>djA=|kJ&1(!W~k3G1#w*@CCn^zrF){Z8uugxT+q*CAKYL}Czg`&Ttne;l} z>}6EdYaC~|b>7IjztYb&im<#(Of2p+v%)pPamu1yZpHgKAmG+=DkJIq&6h=6 z8PDnH1`2L`4&o_{XKbhl7=GMjAYdbqJDT8gSJ3xy34inMU@slb2z!U$zz5Bp?wdFE z`V!_X8e3@?IbXJ|$OZ%iv}@&JI=OdX<+R%T{_*00d|W&uxL^%958ZR{asa0&%* zxIW{?vstuN{&+NW)aB_rs>1`$1?`gOEMFS!*o(fP7!+-N@ZqgJd^HASF zzj4d-HrcN+dr~e=o4MCs0RcSUAEEue%A(7&GHN%+{{HjlS5-zu17`u#{vR0X*->+I z1`3HH*bQo%c|Wv@(@V!}NW!gXV^86lSWt}dX51ZRSwkiK~l0a`62l~l{CT!z*%wVA+9#p8kzjVw^Oq9Q@ z?vkBuV5QX3ELqNms3#WFrfi0Fxi@KfDb70Ce!2H1Cgz-jketFSFCMD~xsK-{ZwU+$ z;(315U-IJ4n{x9P%dk%;R}0d;iT1Cx&n>*XN=w;%a?N$CrM`VW**%yGhuBh~+s^Ue zea2a4gjyJ5#S2hjew@xvgZUR9tPKV7ZCXE^85b6SCwp((PtEz~m+xFA>#*L#oi^G| zc3i(l$!(Q7Gbz2cR(gHEN#prmgZI6j8?M$9#C%p)iV5qlHQGec zWzycMh6$&TeA~bebboZ#oA)qmXZ@W<6Ix4GCtfz?!Q>`j)(dOd6NT=}?ia`0aK@Zv z8`aWDt=(fynOAztPLm(F$_q?8RD>L98mu$&mV2(L)E7&x@~RFkOoMB;r9_wx*3x+_ z$0KPJmIg}9RL9G$`&xsf7t^tC6)5TGc;U{(!tx#n3&(M1^!+YF4m;G0G>$0t4P})z z>$jV8tz5>vF013a>m6XbjwS%V648Kq@{Wy-#f#dPb&h+pP{bRBgkwSCtCco{s;tPw zw|cS$)Z%BE?O5yQ8ZzQm-FB$z#0Gt9)ZxBc4^{8pz>t<8j(p9Qm8BW%CF($c6oPhi z3`$du7QU}jcII}qP~@a-Fz2*h%cjE4* zqWO;T@$b$cmZP1;**)Qtk=`KsGoROxCov(9!2fM{TbK+|fY|bg-UG_3Bc49?%hbsyTc0X@e9E04ZNGZZ6Ng!_UVP_bKetb3KfUf8 zJ~>*+=7Sc^yslwksMfVyJT9aiR4wXUTPdh?Hu z6Z5i;D(#mcjN7c#65S`qI*s~d1xN66yMq;FcD))+!_5KL_}(Wb>nh~5%Ry)+9ad}^ zXfm6<%~cZOXL^;vRN@Y8dZuCwSt>^=*Y#r6A&+{-_eN>FTA@i=UFYkGDHFl^tlzGA zj>S%~=Ld^p%h366EnMBYH9o^~CbwOesk#$S1?u4r!Wt#jb(3~Q zSFWVQ_1cSW9?3Q&gj0@p2Gix~OU{Yj@(>0SWR{IwGhE#>>4NT!m1*2RKEIx8^NP?p z)GoWla8+n>`nH)x$J6pT0eqKO@#>UA=QxN9(tW)xUi7xVOXO&D`s6q|*9vt%R_8x; z>56bC)N^>mX)IlTT={B>DO2-$ubz4TIx`d8m9(8XvfDH(ZC|f^CxXAzI&Uy7A*=(Sjt z+t2<;xVW&td6P_lk^l#n!|v+BwNBWzm)Bb2Ev=8w!;EP?$F!75_bLO+YUEayuKDG~ zEkBVG4DZDb{$0r}LNdRnZ{NNRE=AMei}YZnAiE%=CB^C4H274hFJAksuSnk=^AxT8 zYnF1tz_iclVLrU)>~LMH)|i1`2N6B=k+7i&3sN8)@3GtecFJtxTPru_{y?YrV2u{- zb+3mng`U@Y1oRWb$@1||!r>z~hw3nnGPXIBGQp^5$K;)i5Ha{{M*Ak*ix48}b}(}o zajO5YPuqWUX& zV_!s!DSAjgN%^&A1H4FaKU=%X=7%epI4-PRtX0m^mMGvx}ib@_8GcmYNm0e{&@wR607yN=BDyt+8GE8RX_*JH)33HP{z$;oaje%x~suVI4xaEH;! z-}n3XM`|N}MawJE3{u}9wvmZZANMo3OR}O)Tk+p{?Pi4gJQ5evS~w;A@Ph`HC=8Wq z|H5)=-)S6OTSRFR0Rs?7u#XMdUCNK4^!lC2raN@M3F>D*pD*+K$%6XT6K9sbi$0xC z!RkEL{o$G1(Sr-0-fGBuA6}ouvT2tUT)sUuqP{x9lZ$4Zg{#P=*Ir+pe>)D99v)$4 zwu{VGHg7#c7fB+MoN6sxSR%0%IKLYzvUe-4?!qi~ZTyWI1(MDA43{SS$+2s%-mRG+ zdeTV+Xx!0|qi){%A@^17{$oYOq|R)PYhP#yJPz3|S0)icE!s)Jp)ljIEA@uQx`{hT zd|`!=16YX3)w z_gogc=t1&&O3V$VgZZ&r{H?W}{L>zC{nzL5)lMGW9UK~lnm24lIR?tsZ+-eiPBGtyJPQMJtd6e`!FRT2?#UGCR3=wEvS$Ql_<}SYA-v@2HJ^J2X+v(53ohu+6IOt5;AKi!UTwWcU z^r6ela0Oo!FtQDfsxEUf+Ax_OJM1b8z1DG48p|PoQd9x(v$IlLOLjd0wOJc_;j}gR0yO)T zq0ESNgL;)T6J<}^9b8s*-(No;Z-hvMlWx4V9C?sG;>38+^dtu$#`i*T_5pCCO)z%dg$t^di!*%diyaudmAU-r=TD~=PgP`h4`7B z+2#_9;c#v1+S0c1trF&`6bLc#Zn~-o>69eW5bzj$i~-PS*4m#H2TVw&^3TPK`?# zE-5<^8JTPhyY9&%2RxAXJ2tGCV0R8y-65)W%DlT*s#tCAyh8K|EYa?7-0|Y@MDPro ztx3Tgbru8^E?R$em|uv=^WYG9Z8-Hwba*81r`j&{X47rr-H+?SWyakzR-Z#EeOR>l z9W7lYI@r^fdg2TVHBS_e%)rNc&%1p^lc9jvLa%!Oi@~Wac!fqsH^)W-PfvaEJqmiY zK~8t>u&~TuGJh6gX^Jeuo=y_!i}6=1Ja2HWslU8+?Od_II0m~)`;rtnQg^A5JUOsw zUgeZk=cLO7$Z<>LZ``helPY4sRt5e#;QdMQf^q#Rv_w)$>OzNfLT=Fy9g>qKDXy2E zXwTXnB!8Qj7*2YdQiX}-<&Bm%=QPT9iNm^7TXSwfZWXL40pj{P-#{Hq=ZE6IwY$z` z0|R~;{WMUIycy8?e$bJhh?qF6li66hgX;?Kk>ihnRjfQMKkjzqdrQj^(VN%ElcY}ofK--9O(gC}+n#tAeA zs!q_*(W#W;Xz8Qb%(Tp!j>5339k$;07}GO9`Sf*#%xQCc_-z-?I=OoGs)~w=PN+XV z#fVZ5F>xis>+Vkw@AvfC6dsL$_U7cULdq_Z|9tOqitfYkA_!1U2J6IMF za8msVyv51yQmz_uH{Blo{#%d)#1)ohbK7WPZ zojZ5F37FA=BBvCv@itSwFwhNz)d zsU1mRU?8h@Sb%*suOw>gp0uoIBie$M2gGXepIqNlay+qNlj0; z+c+t78~*9+9m$uIdbMu07bm-R z`|1c%I=ZX32P^&5ne$-~H1k(QMePz-l?O@P?zYq%Y;2WJtD9$O>FIrqdt%jMtw#&= zbD;H!+jZ9=#Pl*>&Ep1FTmJM9CU$l{wUo$Kg9n_Pzj-al78O17tbYUr@Z1xtjM=;- zob213Zy&3Ni$lVc!&sqple}JiiK2P!w$1ah+A(bahu#;m__=<%Q#YHMFNZ~IX-Qst ze&AG{^ZU1wM(x3Y!-i8eEWXvCan|N_Y(`nBv=qCESoQt058?_o2{OVay_907CwDNV z@M-7DZY9Q@$HS_ukX6cGpc1C0j{%)5T|Zq|c&DDD^Yrz*yDaK?w1R?Tn|A4p@+Jc< zFYrF!{}luEdZDEB1*YTRz~g*WUpydEn#)FKC&EFQFNI#$-tRKns*VgBW2ETWdr6(p^*!|50T-S%NI&jt zsTOAsa$1sYnysy?Rk}IhM7Pi_z3^qXNtj2RTj`4nf5jWA2hyh_+SZj+)=Sb=?k^Jc zzS2?81sIJ~hJ zmLu^)ib6%x9Qa2j6g?Gs3n@42%-^wBLeRjI43*BVhOBbh*2D3LK;v|IHm0jJyy=#g zT{Qb3I7S2g-PDEaXL8=Gae00JL7&!wuR_f!bl`bN@Mb~@y>_$uOQLU%M1Ss7IGnu0 zZP_ZAw-I6%-QKD^QwazdN?@E$AyGu;p2YL$>D3dUUQF|I_+-|J0juZK9c>z;L-OhL z1rx>amwt}l6;jO;y+W(J>>gu3G2WWjxHImWo;+tSR(ZSjpjBg+M?w+HKj7=2(zf!) z_O#ZF`j2T1M7!2*p)VcD5A%0NK00X!p7>3<$K=T!@#ql~n`!>Ld;cFUl({hIJe80zw})jqd$0I`)f>Y|h5rA&^lI+W>IykG8W$6j+?RgkfLHCb zXGd9>{vt})sy=04|M+^=%c}NJ{RdqNnVbT(X4t+ zDWPIG5;8J=i0Eo7q|njkw8rXb^>$qxS{WL60+=4pJUm3UYmcdw>aKx?+Hr!_Zirv7 z7dL&;2HQL;DZ1pK3l3Fu(nq>Y_*3qYl zUA03K-E`b_@;2PQdWnrMnrD8;5BHI;mU7mEefbh+knfe@be(65VhE#g((!_xes>rZ3fMgpV6nN{Wp*pS zA0TX=dZ9u1kq&o2myH+jdQanZ;xm$~edqS=8x6fw!dewJ46kXpCHxf9!CZR|s{>GATBJ@qy1#j~I6S!;b&uT01=>7R$(oB?`s+pG;ItJPQ7 zNlW0J(md6;t4{#|Z#yHIK2vgqH%ekwCn7d)NQv~R9^34Va(#&n&)E>WfU{pR?(4<3 z%gI4+G|bun2=lbqxQDri-(r+=Bp=%6JPmITAf|s++JkaXFk4$&?~;qkO{Xqn}^ZT3SYiVflpaJkSUU z{8Lc#PnU|DcVKYP^=vgmtJaOTv9VE2!Fg?n$+-J#W9>0=-O0o8(#*Ij_G_+c*>!Po z@hT#p=EaK_9%a|us+&Z_+k4|$nk4ck^EUzBayea$`NnNR5GsBoke~0B(A4y-%4xHc zB|n;yc55V;0^=0pgP)(>;jl*alA?lw@!moQ>zk4QmN$Bh7pMD3b`!S&hez`9QUKiq ze*VPp`0+1Zb|Ily;q&Q^CAPS(9@UBQVJ=mAFFO$pUB{^PuZl_$v{O?%d^>~e5<&V8 zXlcE#&+@Oc_V9An&IY?3c)7GQEUpz3oeBkF3XY4vrRvnUa@+Ro*D&a0CcaXm|Cal+14!KF29 z4eSX6*uf zGTrkI7$D%$!x}|_Z{NO^=0${uH_bft#ooTNg~J=yBje>I#utb0ZPXRre;sm#!uUK+ zrnMtoIay5rG^=`4VT4CUws;;R+eh8oip&?8ad2^w3MODZ)AT|l{qXe1OUxG2U%Yzt zZZ0(tz%QGb2DEhfgtj($3f=v3LaV+BiYa5zw?31Jy$4M`-STT&o#%N#5~ZSpgG26` z!`9@t;5fb__hYN{3o{(h_y5*7aUxBUT%$wFJf-6JEPr)%?Yq5^HeF+F)JmHaW z+8XUZjTkasx4Qt8TV-VTu;=_!PxDzX)F=B)DR|pE&bsbCQ0NLO^z&vx_ZzBG_(%WR zowu4mb@)goRn%nl^~cLALnfxP5fbl4%h=+j@=+3C-M@dI2R4#3AQ060?Csm{FoDO9 zZ)Fd^*%tECugER@uWe)4QI|^fE;ZepyqGBF0Amf|>iPhhtehNhg=6zb?vr%vEq3WP zyB}@rno|X}zHgp|&;s+u>+&oNTx64Taqi)eDixQ2fbvrw3FF@Qj)62e(6~3I>yy5J zr!60hqDIejA-C4DU+SKX2o=|t7=qAQ16f}gL~Olt#-1Yyy>#%Hty<5UM|L~wHg|M%SS_FS&0Y^_W;?Eru<8|6w5>u2 zyle|P^@|-7;j^xYdEQLeWbZaU4(gJ~Es_0N%sV&>`TXtt7B+!0Kt{f*-a5|!Ri2Z_ z`6BnqEa0(-RBG~S`(2KwQ@03_!Aepk7F-?ISL z!{$QO%~K6*Km$12>9E!pOz0)guoa-vGYteRV%Rj)$764o5fl;;$^F(%;&M0YyUxK!2$zgk-83FM`jc}GO-M>|^ zM)bqrIAC*|m%3Ss5nIDbv}s*kT}!N|sUg|Jo%sBdGvqOGaa|SD!G9zBM_b7CG8xCg z#f1epEZR4qhOzv;X^Qaiabs3@JPr{(0(aWd->D;aLMN^u=-$R+}C_};(F9G zfv=g{kNFFbS4BV?;qg1q)pK>Em6gL_ItB)GcNpatE(xcWPe~J(I~Wrkv{R~90m=%X zpl&~>sp*Ry;=OtE=9j3bRuT;z>JT9M=Gy34iiv8!b(j5qJO+T?I%2+}HJ-!Y-1yK|xLe2bom zsUv?Rx9VEM)|RV&&f+1SPt?0HxIeO;@HSxnGCv*Yv2^0A#go#%u3 z!=s|q{<&e5;qR)%`1^|+<-A#OR_A4#-AUp! z-uKwvyq<{G_OiuI@;YNO=}Sy|p>)TpZqfM2t11Ru6;7CX2Ue^;Sxajx+V5-)ju0C0 ztyuU!2^f`2nR4!3Pw;%h=%3%P+3(?>w-F$_$KTECG1n6KW*7|Ze}Zd>3Tic5jf_Y1 zG9eJ=V}J1+aQ``)IRk=&9mS`6fhh9&$u!V8yD;9go|>P>+GJ$a-PtXXp`eB6=50TV zS+C}FJ1_;1ygJcYfb!kDcfWJAip`hvt%RC6&5bkvoUl%mduva>7yTLVrXY1XBBEJ)G!cl9K%Fho30 zTN-F&-@kunZr4yNPCsRSGU!Z~IAZFoZ+UfWj96{JBBWf%%FeS34*LA*-Ra(9-Yg2= z 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 m1%cNgK9#$lcXfT^PTV_~kkk$XUtZQ+1u~j3 zLvf5%o(PQZ6wJOj6JS2v?UdEhrWnWI{=eRD$E?oX@N0g=e2s}( zyYA`fS#@&64t-=JLB<*U|I=T-O#O^)ntBB@|G^6^B$2Ae7G+ZtnG0oQbtxEaJHU^b z(n>#cV1k&W%+ms44S5y!G+3;$x1oEgNmE(=E#tn&2)y66p=LBw8c?z8`eUMur3o5I z)2sfhj}LnDUL?5wh2(^C>WeZm#6USXbm$O-4{3%FcQlrd{UKA_Zwn>~+nsxl8*AtZ zZru5A!So+st;q0qaaLjbKzPd4v6Hs3eW7rk$(6BJ)Hjg+BLjP~F42BEBI@Ku!neYdnD=$C!Qfqt5$d8~ z64YCZIiT)%+~{(8@rQ2@k?y1jns>^nddd+isg4hDn-I>ZtJe$XsAruequ}6i#xlirLm`bZZb=9+fKX?JB`W*H&7H%Lc<>ZPcc9)QF#FP+ zs7DMmHv4v(9b4W$T7=&WmAVBkc9RiGljW7|{1Xf=_~|5$8gfZa>{dsM;f|kn!mnS{ z=&R|JP5?&RDH3&o!?H3oIt5i~XjYAsijQ@HVFn`V@&eMMBUB4)LRYcsHg_RYyXVumC*W;U-sZdoo#up#A{0t#1Lft>4ZSOQsYMftcKByj4 zC^`h;1 zAfrGYHSn0lw;0Ug)i!y7UYsnqIX&_L8#-c>$-d8g@;5>6*kW21MChbrbe5k?bY3o+d`q)YC5cs?Y^<&njUKR3G R25+oF?5&-wC>EHce*yI+q51#- literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/rotation.png b/doc/salome/gui/SMESH/images/rotation.png new file mode 100755 index 0000000000000000000000000000000000000000..aed7744ba76775a286123bd500522d10ecce008b GIT binary patch literal 23022 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

N~frmdfcPdlAqr6UD&7@o_QKXDKgRHOH<8R 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 J?c>+s{{uGtta$(c literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/image108.gif b/doc/salome/gui/SMESH/images/sort.gif old mode 100755 new mode 100644 similarity index 69% rename from doc/salome/gui/SMESH/image108.gif rename to doc/salome/gui/SMESH/images/sort.gif index 5f0ed45b4729d35a0ca3aadb05f487d34c8e52a6..28a5dff29e5309f9839fcd374188fc3c479bcab3 GIT binary patch delta 237 zcmV?gEiO34bgA0000|02=@R z2)h6U2pmYTpuvL(6DnNDu%W|;5F<*QNUTNwcENnm8xk%*oT?&YlDT6cn2CXH5V^1tJZaw5Cy-OO-|yfV3&ir!b>d zCAyU-)|X4S3Ki?sBudY)UC9Rg~ohvJ^^ literal 1009 zcmZ?wbh9u|RANwK_|5Yiq~@$)tF?6t+TtG=ARw7|2wZ%@_RhU*)W VPtWtM);)TAhxVd-XDt;NtO2A?bp!wa diff --git a/doc/salome/gui/SMESH/images/straight_after.png b/doc/salome/gui/SMESH/images/straight_after.png new file mode 100644 index 0000000000000000000000000000000000000000..4572fea7bc4826132b16299878f65ae18f1cdeb8 GIT binary patch literal 5369 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 aap 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/symmetry1.png b/doc/salome/gui/SMESH/images/symmetry1.png new file mode 100755 index 0000000000000000000000000000000000000000..c8fda3e9d4df2c72876839b663810c6806fba1a6 GIT binary patch literal 19741 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/symmetry2.png b/doc/salome/gui/SMESH/images/symmetry2.png new file mode 100755 index 0000000000000000000000000000000000000000..b92fdd9f6224e1befb77c959e8336bb113322303 GIT binary patch literal 21831 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

H#$+W&o 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 A-~a#s literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/union_groups2.png b/doc/salome/gui/SMESH/images/union_groups2.png new file mode 100755 index 0000000000000000000000000000000000000000..980e48d4106ab6a9d8784900a3bb627eb7273f5f GIT binary patch literal 33473 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 QDFYCAy85}Sb4q9e0Q|RI_y7O^ literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/union_groups3.png b/doc/salome/gui/SMESH/images/union_groups3.png new file mode 100755 index 0000000000000000000000000000000000000000..caf6bb42bfda6501d495e29ba299818d1d8be66a GIT binary patch literal 34013 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

m?<6$92fb! zoSO5RpE{S+4Yqp7FDKcL9G`6^6;^TO%uvq#@ReFy1dozeGz?>86?k$7agI<9(7g_h zY~VhT+}#k%DLW`kH2xmL9%5M*giJ3amzfcbN87&NNh7Gg7EG|>mguqxhCM1ZnVQ{; zf2bI|?v{UwWi`CUorBBv9k`0Pm3(Q8tp>tddNeD2BQo32W)L7PLzs|(p&s?>&G?i0&M zj3kWbk|qs|tj%kg(p<1st~u|}_G-uJG@Otg4%V|1UJN)9g4Fw)Pr0U$w%;%R6Q~7r zsOh`BXra&o{j-;1P5J85VojO^! zaoRXP0z)fu=Iss1$4;}I*)OiG)HhHU-=EkosL`iOKnvq{5d#Yz;9aS#1q#;( zrk*C?kTUnjAd|4Z$ncw_1_uvSj46}mm%jb=+IuD#D_VMM0KXjhL(5>U{9#&Z^h0Hy z8JR%g<@k_u^hI>-fn@@yl_f9iuwpB}o8n33KIk&fP*urWl)WV8vAN7RJ0ocJxK>!Z zZi*0X^ebww&R=uoA;6zR+JC}vdlbe&4i~p(%lj`;S{>+Ft`~3cigkX4i%ndCW&M7u zmF_8QOM>&ARK%7g`H7Gu)XN=h>{S*p=b~~Tjn%4GnRnw80r<}wP>Ro`^76@6na|AfhEhbdW9-QIy=xB;WceL$;$ZyT8J&n#Ejj|#+jWNbEPsSQK9&zYkfz^ zoTQc(R1+J_sT+nv6T~3RTnj2Z!dLK?{V5gL-J8B}q{3-Sc|L4cdRv5Zs%WRZoB$}$v@MQs zjFqw;j?HzI%-LI)j7H!|+P!M7PAFzIpj7OjaI!HPOz-8~Sr@XpX8DLgK^JGwTJ&S) zo6aKcZduJmozmR55;$j9keji<(By)iKY9~+i|L3<-d$d9do3Lz&!RY^dBl@!E;3+_ z%|&h;!7u61cVv&JFWd({MVViqpqsn%@I*>Yi1kkcT^@g(nbUR2y+ENcK!VMmozubc zCL=n-iVT6EGX1{dUWMu#x$9<9>LY7c6R0m>anXFvSnburOB(JPsOqp@NrvjtR;D=*2mxmNCw z(~(>A78yl+TmMYx_(86!+vK`Yk9cbl2#&rVM_py(*K}%Nb*w|^9zEJZI|Ev!Zh}=v zZG--s2lP@Sb_`kp5Oe_)pM;SV5_1>)x87$zvkYfXR6|N8G~$IqgHp}n>uHkZj-Q8H zj&K*+22;;BIA0UbGK+nSx8Fg~$F(3ZGCH@WdfEBx&uBuvacSS5JhiRe zJBKymVXhp?e)wfpTZ(`1d%QA7{ZT7jp?38$lIUN5&3n)17z;|0iWn@x4jWTkYM!kW zmbmYd&zwLS;_Fo@d(;&y=Z45WRkzq(Z9!bIm?7}tT-r@|(8s2iB>3M!LL6s#SMRP| z_I6(#xfqa2rJq{YG<^Q_WUqbQJEevhi~e@rIh_BK(VWl#d3vAB7jfugZI3&>D)w-B zPstQ~=C5n{OH&#slDA}PQk_fpn#_jBjPe8v)EDT@*(r^6uULZmmgTB&3hr6g{bYu9 z80UF)CSLdxLuLXH7e4*KzncdLD4=<4P(;Z4xkz9&r!~C}Jw87nQZMyac>&UTBS>v2 zchJ{B$g-oXpQehB7VN}~-<@f%ztD;Gr5x(~giXS}QSk8s)JBZ74&?F|E6H*bd3u39 zuIIqyjO0DD!82WoAvWG;B7%SdOE1SWl4iP=ANHT6FrT_0i=Z{;Gnpcp5PmHW(txRc zm2vmAa-D^1pV7Bei~-v@cZ*D-?1~OG`|G6Dz1M-Q_WN;XFiGS6Q{ZsW;t8&PqsV)}Zg^^HjHaT}flP0R{pYO;gs z8oE0it3Xv8uw|t%XxGM7b8AMLK_#^&z_a;vHD)Co92RCDi`5>AVP7FB=GSCtRS7EU zI=6~yufh*;;7E%+P9Bhf~G znlbiYH9u`?ICZO8t;w{F;JFixjHJFiyMmmx)H)+j$R9I<@VeGoy?NJJDR^Kn@7ZeJ zsS$VKq5P~b3kCcdLl+5__ogXt*&jXDhh+hpM*-?;26u3qUxT`0S@78mTE~8tU)kys zkA~TX6+-3AH`7R}+Jdw3X2W|p#!C*uh?>8taz5P<=>m4jqgJ)-b;wz>%zgFp=Piv) z09oMmMhPwx?>pf$6iEtbA{g!H-$ ze{TNlP5Gsz<|HEvfipKoACp18jrtKcm;rHqn(dG_KKpqXKNt3?8rPiL&0_Teg_xR$ zUxPn3eFy1Pj5laK9XJW~@Lb&wFL3>mJSo%8&UJSwXaoAja<=MUgKn zY$-LuAf#oIGw0oZCSeqZd@T*m9h zzqOJ`hlQyKJ*j8~3;oNQ=nag95$C^?vYWqLGJybP$Pa^$g!5tJdgNU19?2!ODujL> zj+lz%R(|dFkm*JKNnTX)+%dg=j1!_B=4RFgFQZGvef|$LMA<^iB(i<}ar8Ks~CLh*Y}T&9?8nK;~jd;%OaY{3GaDz+6@Tba;E3 zoa+KCu94{R1Za&tfN0~IfaE@}=8#J<(Xdx@=q&&xmZY@uTp9givowO-9_oQn5~z9K z!P%dGd$vLWpwQ%$RC9fc*W>ULHv^fEyZ8C&JITgniIk(M06w5`-#uk=EsUDP(s6xr zv67uLB={)7M-EI)zc5Ho;Rbr(CLPos*4S!Y|5Wh#(-G%0BIO{;)pb5DYoG)r+zkR3 z3)Ua9f(s`VpwBXf&TRKZ61kgkTq8k+e~IrP=m%9?XBp%7|0qvyHgTOUJN+&3IC!Mb zPNl%esi+ob13mU@Z+rm(-H^NQZ^$Zk#w%2h$YQXhg9Yqy~=I54+YNw#aU)1S+F6#v%I-xtQ z0%!jw6{MB$Tvim;v{cm)A~=&`>&CB|7lQ^y^NzUMh=cm20?jn?=qJoJP2lS3Lu$LX zCg9cok?ko1y12Y=-dT7{x}<$D&f*aP{_)ECUB!Q|eZ@E$bMoBxHfI!4HA!(;VKLXA z?cO{4wGmCAlvrFa{uuw$ELESg`s=tIw%&P^8^i$3zJ#ImrmMn_MhpJW3m|*xikk9- z_6g_;1q@fBw>C*v!_42GZ7u*-Zj>Nik+fp6h#&V2`8%HOzJ2e-B$%-)t}*R>jb?H+ zZap=1UI3K58nAvEbm)-gjPXq(P9&U|%l0(nd^Hnt!eK1Ec63QUmc-zWq~pyK_0rj} zM$X)hiB}D8Z55GzZCx~wKX;$nN~O3Hb#6>1>R<>vUrjCLs9tI0hjJ>c1;wqHJG0Uf zw2%x7i(Ox5vc|pjFY#@?XZ3^TICCl^Hjl%1;**L{R=dQvXM}{dd4D^1xIf*JmyCym zA1Zdxd;s~vmwg^@R(s8ObyoZDn~fvfN)E=C?mJa;>*`)^wycJIx=uAntiXP4{S+`c zl11wxvGu`!;9237Mqax@6@TWmT@5GE_EAg)wqrmQuHMZy0wLQ#|I@D3|GHDDKlJZp z1U&S}v{M;!*^F`0`QUWRbnKcx{g!g=mt8>0L7KO25{5h0C9G9x;U3S@;@dfaBq;h0 zESarw1Y3-X8Jn;5HO&exkyP0XnoVKYw}yhj1l^K^BG7tbx%n4S8GJ}k+0`ItOVFi9 z`c#(>8hxcF8;n?Q!me8|L2FG0RJR*{Ls0j6zVb=D!y^3q^9)S@2 z+SI^*pJsl3?Z-5@g`T=ILF4P@1SKfEpsJIrgTu;YT8)YgjgJqi@-CJb0?nC<77x#L zv53~A%$J|^#2DEW>2i_HP&J2d@U|)Z(j5^#8E=`cbC+EG*8MiP->>bzlw$2#vRC)~ z(`%nC2{_L;ysVFZ3U??Nk-tLw0xRtmZ$2>U+DbbHs z9kZs@aMkp^2%W{_vBUF4*aaawKp*}VT9!wyB@ne#CvX{Yr%0+fz&gA+ccEb-n%rz? zb(p>;nmPVD;YO`=eeNO*4KeJJKlxiXZwOYO zbQUADQnEO|fJD8eHEFQ7ez;PoB|Nq|0Q6D;vDvLg6be3pqvHQ5@eRP>V{9icP6_IK zo)zw0Qy=;(cN-cPShscN(5zJFi8sOG<3F}WkSlM(%Gi4Ud7K~e-ul}LJ($GulTLSpm3 z{EgOUQlJMnxsw`I$FaH9jHG}(W~G8Tg}=5VfM4K=2frXKxy}C=kMPF zA)PPC_MAX~d_z37uA*W5T{edMzv)SBF8kJu`cd=$Fu>bl7qw_1sJw*JBka?objbkl zL2zJhvH^nNy^v686PF0L;u+oQR!myU?$yjS38a}Jw~cEy@cW>ZhHk9R{V0nZ4ccSn zPY32Co98O;(I(zs2H*HUe0e<~#M?Xr?=UP=60|xYJ3iFlQ z$77VF{X}JU4vE0ouLA@CbQYxfRniSYAq;Pnc_mQJGswH|xsg|s8k|H(Ye>+L6A)uV z#IOjH_~bd2)Ih&$GI8czmPX%1E~y&&#j@P)|6NwTWku^MW{rK+t{PWDWPjN%NDo~` zoSMQ1h5T{%o6!&Qch-ba04&~)dj^qiHd;DimP83hkCyn`XCpwh_3MaMC;zi&%LCYF zU&N5nCOqSBg7Y-n@*Ctot=f=`fa|OPza4WLn{Wb`A17K|a`@wR&WNJ*ws;lYOF`Di zJvlVjb!oSC=|Lu$&?jXAunex)nQuFNjsAC61-h0^*@a&^GOr}?rr+%UY)l&w@Y`Jt z$WaU^)}_&h@-v=T?wdK^6Q?zq1d{*JVaYbm{LOu2{V?I+W8V*rkMW5uvBEjyUeFu} zkBbAs7o9p-OJeFonlB4?i~fN!2IeRvsy_h@2-1LNSZh~W3+oS^h*l+=*Ud9=3j)GR zZu}SCrync0(;i<6pG!jM)9s`)b4u%va)eyba3smz(zTdFCDVFb^H!D;v<}^Hq1W9k zCY>G~jFVK!yCTG|W1U;S8Y$2vOKd*ZwG^BS%j#)cAajmD=`S|N&*}05aH`l2b(`~x z1Lix~xxaOt>C~5h9*Fi+J(tGL%ABO;Ju_f?zt7Ql#mRvyr|sW(LKvtlE)#V<&Uo^1 z(f}&=-y|I!wzu(h-3v;40go}U*Vjwe^TBcBC7G?dC9w$&%R)0n>LrG6XvbOURu1RG zPq;&YW+Q6h1W-Y(5DIpF)wls@s^gNvdxE|aiMEwF%MGRPnFwcrv?57=4d|;vgSRH7 zNkNTBb_K1+C2k$ZZb*^#{$yS`k`dxP*7+F!c=AgPs5mfO7yP?3pCXK=cxU_xV?~7D zGJCSM=`aC*5`Ell(z`vTk!stp*S@Z_)9AHcdQJuB;ww=Y+ohAOLv^iWsY7GhS@45N z2H7fg2KC+a$k($)e99AtBf4<7$B2gAS*Eu@cJ4ap;=Es0K~l?x^nbn(;z4brW)W|YO(-Ucd2d5*~$?aLYOZj(!1Z$N09LhhW zA)yhw^<_Jap^CaO@ftQhdFbJrfr!`w|6domt-CG@jvJ%f@1|?Ma=dB1>R>MF%!{OZ zJ?qSDhdxEcb&-pN|2q8=&ht{b)v}l0pWV@I#4|U6Vry6MFU|IgQ}mZ%Gh3Y{WOODq zWpq1-G-&50KJP&u%vy6*a3cr$O}aJfYI?$7D<`z&*RL!LM+dQ)w8&5A*JnOO3HErq zhe^U01I5|yTSx8>T0feGIyKtK#C$n;L9B1S&tV`n^6BZ`QlFaURYT8_H8XZd^d+>1 zp^qt12oDVW6knG$_q3|m&W8Va;T14ZBy#j~^SKJM4YT5;M`sSsSakC*u|ZmUP;0<9 z&)u${?~draAGIVd@ChqZ8Pe{>F!`kj8g2g*WOWL;q zx4kRZ)WHZIpLCf>V*n4CK7j}}+U0a29hahM>*ulwhtFaxT>QDk$!WssrYc&gCFg$a z+IZCD&M(s2R$qX9(wos92UWWRAB(ye-XLOj70F&EGww>&^Zp;(6^Z&d! zl2+9#guI`)Qn!i)q>e5oIXBVXTusbm4y7ijK2H?J%SSzbtlZ#@K|*ld2v;P|3$m5a zE9Gxh4`r41oT-6_B8ICE0pOe8UG1N?KY$y32trT?tqA9tAOurzL+ko>>xkH9YfY#g zzqc*VZ}_-Pz$?ZHTg9c-dF;a#huZ+|gkoetxv1Zsq@8oc={{wPswd57iHT!eLp=>T zVS@o9MFbmEGP6hM2yG;twVzRM#hJ0X*Y};g(oV9n-h{l*Jar7!eL(;O1v`3q(C}9@ zF-20?-p7Ov+0ZVe4+W?At6AUvsJ%~_0bmdsRIvsG{l|1hQD@3ENetV~z!vjCt@swl z{Fk*GuplvlW|V=cN+ulG?lK-99>w|9xjpXY(+j(SIj3wfEG8r7lCJpoi*C7o9Vv?L zOZ6_S{~bQ7Vsxu-k#^Q1qLW@$Bdwmng;nYTz@PAOR5qgUAy3Y4d=|w$Xu7ao&uVwr zoD346;+7xwCI~g!D8E3D#(`oIra~^aew){`OWt3}2@PGu#joS9dp((YGu#~Steo8R zTC2_-E8tN-#}x}_+wKM@QnOpzf9KWWtrz_y%2w_%*)B&yOWSjz&5VqJ>c!!dqG%w# zh-8E3?E}*Mw%HcXG{G+Si;G_>i<=1>gzY5|Tybyr+29_n)RzTTx%<#skHwSux2}{% zWh68uP18>E1qkNwT!#c;yBVPW_-+Vt>7#Z&`zzB?@hf|tyV_gFh}^-RO7)bs3+vZ5 znfm0vuS546exT4Xqef!zBU}nK7GT?*#mvtoXa1-^-%XJ%K=1ZiJGu|fD5Z#?&%LEQ z5$j=j)BY1C{3W)^1xL`f@9BqP04CJq7jHz<<3r5hm8xy)PWFI!Huba>|D%TU^ozh> zdtCj?a?O&dYCk@fH%9b`tl@)l>n%EjL#0S~fiG+`Vjs>+nF{N<#7#WvG4~Nd-?aRv zX}j{35oGm#^K{SfM2ui7Cds20uD$O-e&}Yzj$x-~s9ds|040%#|E~TaK5g)5@tynj z!(*bN1f}nq8_mtuu%d*nT)DA^1RCR`VTC=xp%VSG7-rEvXVut_WOS-|&dGwzTRP<& z=6@|UaQuKKdoxXCj(X%j?B?Jkv+oyNV}~$Di`w)2IwC%CC&Uktay~Mz}^A`52%+Ww#z#1 zg3s=%m+kNB)}xRnR#hgePR=Yujk3rUTqRg$ZF{BmQ3Y*3-UCf!_n7*y;dCPxtY*br6_l# zIH`NB$k2QV)%%b34}1Asrg!z=$4&Hf94)Pm&_!yf!LeDjoH<3!iFGH67T1!YnMed* zVCE0mi=>R0Hl^BUKNo+$C@u)U+hz6Ve?ksx$2a(^PoLEl-6iwT&l8+6e;QMFzTd58 zY3bFQUkwiG<6D5=k`Vnu`JSRK7$zjW*IjTPB?83A+RX?7`MQ*7+VLf7k^~f9Oa|Bw z9@_^mw+pB58KXH%3TPp-tL?|xpNq^G{r33e^2N#BO5$N(9I0T@z@O#kVim1G(Gb`- zDn|IIGO5yV909&xkBrt8xy^Lt{o%6_9n@fXM2BF|YArZzmf7{&qX+-252333?`?uJ z`pj&vP!5rV2sEXa^*Oj!oe_?jvT|}gR;RE(C;VtA2;q1bKkz3gxYWMjjNm%!kK#(DUEe7|MsGCqI?42yU zg&M1PxhoXsjG;{m=o1vWnyB?3qF3PQaM&jmGbu)_EMW+x8rnA(|3LD4-(E&7+B?49 z9rtZtbZ75VW1bu;x$9bD6ZbAC`y>^IlWg=%`kr=!AOTu-V__hzQo$3+D_cD1>%0_E z-UU6=JTw_nO6(NjR!%h0M8&{t7h0u|M9yTK$PNgLBxy`z7El;#^Q}bnC4J_gB-&cB zAE7s8!nlsx+{mJR`L^GPPSI-(Y?x_d3Lp3~(JZbdX*TP!kN4!F`+yqk(@pFv+(O6Y z@a%&On->->o&L*qBe`>WBw0vE^TzyRx|)rsjLezmycBf%8ezQ_XEf zbELRbF#Nya?U}}9cOFo1gnvz@2!OQ^gG+90OjE5tHMwDikJujj?}3X*ocB*y1s2a- zB}}5uaU0|v-#H-LpBgpSQ8lOBu1i$+QTj(F|AFuEAgQ8(qEwrz4sc_Tx2xMI9|mfJGjps;>qNeQqd zwdcSNt-^St#O;)53!01b4v@eaAzC(#SjVtoZWJ`=5nGEMhyfoVUlt#Slm9Vmj)5j+07Ahh!N0sB zyrCeU)4XeXdW;S-XTwvo{y|=Iq5-b1H*Uepr8!IKZ;_*6y&u3^Ltyttccy6!QrH_FB zxabn2P1(FN;icfOj$F-3CuY$G1CBpAryuib1@PT1aw-7RQW9vjc`trYKuz>^lc=H( z`7&VlwC|HVB-3u?2=81kzG{`!GlK(ul~?GD=uH#88hLhIejKS#LCEAj<7TcxiW{;G zOj)~3TM4)*bwZts)NhQqe#LgQ@i(F55@%FHKLX0wZl2-f_xAusvT-YdqY*vF(5iOcrmCu>?2!J^3(Yf&XL`Bfk~ z`4xus`LTk+3wyNDD5evhXc>k1uFR?tdT~ zu$+f1yCs+pnfh174Zmyj4WE^>O`5jPU-+tfNxkrkcy=FWsw6jhh2y$#8FEJ36?LSt zo{8Aw-^=F#+&BEPn>-L7t{J5mT!W6wXdMU^Orvc86EOuywzHeke);AOOlFMP!{*2X zo}Cy$_@w+x?HAM^80{vdyh+t5H}eopCgLV*;~92JQa?#Cjl2B05)PU@dj~j!iYOYK zh|**5Jv;#wPRp|{Rp+_YaUPn3%|Ops6P2mmx-A+g{^N`RWq^96$h8SLc`40?taaTg z(`oYbw*oU-)HHo|e0D4l-!O>~F~V1bjA*JZ@NfAl@jKY`@8k(wBF@|Vg&pWtmIyGO zdD9Dk5&>EY(wpmPd0Ntlg#$d*h#Q6DZ~T|ysz2S#&Gfr0`2=7W5NB6MpF_ipoC6id zRNb{?o^jj2qcA;Xr@gyc)Cg=(@5-#w7iZcZXVTA?YOiU+jqd3^UhQNcO00>6t>)Qq zdwcG+IGyN1YqzDE>GTx7F{cNR6fWWknr`?tvjDejd|?>N_VYxUz*Ha{Ys#E~^5o>s zkHgu(>v;D*OtHOHNNSp=Nb0w_Jn!m?Qk9F6g?Kz7CN3wU{5;;163uMF+&P|7^x_{; zv%uBf`{YBr(*~%7OsO_*r3=A=3XT1KuNzDDqsj1uzyMr$K+<)xC`!|NN z$NFT(D#^-hk)Ripk%WLegBZyRlrLf1`uS4&cqO(&vK^+_t^RJxwd7ks6@RoFm8*1f z6lE{`-YvV?P3|q=?|J7xLfS|G>^1q~K)O5?bchhJq|9>%tI(_@f>sK-8ibd*6jMRH zHZ%gZTcQ0AI5bmskvGx_8zmLu-r#FO(Vs#jVTu9U)SlUT9ilh*xTMAd09NJ{uj8i6^i#@~6!M}s zjWw1^G*F_giDLgsMgdF8!!_K5PSef~I))PluT1@*U}~eIdi3P%WfHcvxd^kgDcO zMdKXKMb5!Terx#NUBx>R6HY&IO|N64<=A0Nc0Z)TZ*3`0H=%3~=>ex1$w>3?;VyCB zC9NhwVx#o3g$rUhb+?a}z|1>{PjFzU;9&AWauj>uJ7@KY47Db=O(i=W4i5+a8aO%; z$eo+D@Y43}KoyAxCriyAmI*ozU+ET^jSPaiiC3|t=`DpUg_Om!#&Fx+N)Oy!L6#b( zZ)A9>cWS@8J0dn6@+t*GjM#)Ov|K8;x%x|1L>%b^H;G@*^=(8pM$ElgZKuiQwd8HO z+Zyvi_Y2ewJzOePQ`Su5mW1D!p)Ubs7{$UwsqNCSbv}y5>x5|(iMo|k`O1k)w?O{( zr+Ty1Jg-$&3xn@uI(N5btPL$=%8K)vB=()>Y?G*fV0gW<1G%&R!So=%zL~<3N#3l> zx?6yfa*1!9tmcoFU~r5Im8Q$fVx1T2=8#{h*$>nIIWm;Yd!OlaI`J*&rHA}Gai{mB zrO#mLgm3!=2)ko>ONh+w5+=92ZLb$0`W7O)SNM}=S8Oj>#0`_Ah~{~tz1Si@B$o?P z>uX#^%CXg}I*D_TGS%qIIgco>$@K3;EJ(s>nev_`KtcfPC=TwVN>OL@;buTw-uJz{ zlEnau9v&E&Vla?nn|V^~jGNh5731^(8xpV}6-1YkU30#`dK#HSZBI7Y8pk+Hy72A4 zIol480L9gc;e#Eh&@%Nu87-^SPuVkU5&T$u{Z7?bJfz??gQ3V9Y#qvJR3jLd5YT9Es$e@96s~Lwsl*>zOI|vAW+w{L5T7MP6Fu7VcGz|K8<&G~(jM z{d>Gyul!YP#;D|jQ}9!YncPRc7jH66m_`PB&l>I)d`3$FY~MWs*8)zmL`lS)r1FSO zSmx8^KW7hZQS7C5^6RZ&R1S?RIDK&$`)X%?^}RneG~2JqPe3mqIb8F}8!|QN)^6K9 zUlRmwDq{60wLt1 z`btQG`g__LT(o*ZQ@k%8>s91R#CBeUXq)%gW1r?>!4^tgi78p=n!Agys#bmt%~`a8 zEYJ%;x;PjQuc1_qOC!`{_a0CB^yDXTQqFt$KcdEMKDt#0Z5Yee^rNP6%8|}pvi=nn z=HNQZh#H`6b&;kL^uRdUphoj0$XRI?w@-I)P0wOsEo;hbYw-eqOI50flx||Ry*nz? zn?%QDuG?wWaihx9m~UGwiGU+8u2H~#L+n#zgu7I=G*O*!>Dcsz7QheB^u?T2v6;5U zB2rFT&CjMjq0fExRo_7_0?lv$-f~Is#DHdLeABiq<{^GRe)U-F-5%B5wBFL(T0_Lq z;mg9|r&UdLGDbN382FlUQBKHp3QR5Gh8ZMu^1<-iUfx3UZhvb1pc-eOF`(;9;S4mOzZ<0&KT zbQB(|c&qLuU^qmEU1-PCa#4}aIv%NEw)ME~vyxV+Pwn*^X|CmOZ;oa6@c(G~3cn`5 z_isW#L0Y66L^`A!l$I12G2%ma4Ui6lPU!~e8X?`?FzH50hQO%7Xn5}L@AZ2AfZaQ1 zyUw|<^R5F=FRdHqjp7~Zfsh4N-mD%ew-Q=?et550)TwT_HDiX!7K37Z0#hJpAARY5 z{w5AeV)T3EV|rt==%SLZ->YyMm>Rd8OvZDLBw6ifIM3Hwcl{$o6VCY5(J4?7BjUSG z>}o5yG!$(-_GUJL2hDY<3fD)MlF;NyE$ZOTOvc1i3ZC0akyNH}_c!ou*nhD>yr@8isW=U5KLy1P_+RnX&iA<*5qk;@(s)6N@HlyeEaJ$5Ayp zlxhxZ<#b}mw^qi&$(-noXOHREErhD|vDybv6rmD!=Atrvj+?k+s&zlwu%`%06BTT_ z91jv14wlzC1=co*&9ceLK6M551$$BDfH_AVP%i*a*%j^8yfa7b!=GPRkn91O(glA0 zoD#oZ(LM1~35zz>yYD`UR~rtS($(F--~Z(=E1J!hL^e(522s6|-fXp~`0Z{70~3K( z{xy7OgP!(f8T8UUd2UrEeZflEi!!;KM~dqnE-iBw=5X6ihYFHUqF^_V7MLt-|I|je zMf4{{14@$5yIdIFbkt)sL_Q*tE@H!%sH;uay~Gv7zKdpey~O)AKqX47RulF|G*`)f zp^gvlsE>U;jLLP(UjSb*9XiWa@87gbEptXCVoA#k6qqpI6n zM_U!wXW6@hnIDFPqSEl@%kIl0LuA?amGu)(){2UR*&RYkQ9z4pL-=8iw4<^*e z_PPHg|7g+qH)cApk@3NtSGzMhcwEbW`b#noA)2ZRt-MH*BV3h~!Azq5U^pt)fic>f+oR3-4u`9nhc##CfAom) z!^7+CtK-%aVT8eiCd|Hik1zO&%Sw(e+JW{xA!(&e^L$WT(E*txP8oKb=ETo8q)t2z z($Wp_{~fWy)&`JVmJXX%^r95MX8S`tsNhEjP1;!9_N-T<_vSU&V=VO)20suR)y@7JsHHg3~Be+8$ZVuO0y!?3=MT-6) zq)iwC?f%vQ{$Y;7rUt5V#70_aeHge2w42P{Wl_jOPG4LH_bG$IPMnFP>sYo9gkSOVAuU5m|oY8YDRC$6)iXy)(jbkUsW7ZcJ)lg8Ntb~qM9(7hz3l1#gem^Zm_ z$bco4BD?!{-dOL2k-9JN)afafyDdhcp2i$?a5)wias_B%b-eKAAtAAKzs>Is){;)> z87N~=-GQtIoHUCf`Bb*MV zaGhQ|v7>igwtognBJRXPw~4JRw6fYaB@Q=T3`u1c+nB7(syV6v(D}Yw^n#g0tFw5?8h_2a zXg!mkM9-+2P9*(OOwvi;fb&_?J7J90sI6O8JKvr9ypMM5#D9do#p>S|$H=88eA4#$ zg$-r23UE(({gbGD3xFi3h(S}IhPs!(keAxJ_1m zL>iRt#XVMNX9_(l3a>y!LH;{<3qBe!^+Jjvtvlkx-MNorB~=DKQ*;lRC-`2Hb9IH7 z^Q%XKx7+eE84NU|ahPM5?=9VwMy%RWYxByUTC4NzvuL5s-ga`%KSg8xZS_f9uc4C#@zf% z`*`wEa$aV8E;If>#%trwnsjALJ(xB2UD)z6bmWZSW&|%bDi)d1|@S< zz#;Z+?;7EsCi~H_qa()7Bw_McW%T};dK;r^mUmL5ARY0^0SH>PVHqmgvd^AFd69Qs zx;c5j7c$^mVo7I>wsJLPUCkLnm-_Z$zA2cFn^r-c(Hy8#cOsd2MgPbHjxXC4c|G0vzZ8~k zGO>Vgy{CIF$4!!S=9J-&4JVT~4hUs`7HGC3K26%$4N`3NO$M5>klWZ5wolmFL~+t? zdd2E3L$vXrrlXMCdf;Y>M`cQIB2~+-e{_U65|((F0YUiDlnqQw>mZbNQdZ;FrzSnA z;?~ERn}aEA7%PD>nb9PYg7Oy_iF6-kR~vq0I=kG#FT~YIL2gGVYeUC>dAzj(y&E*t zq0EI+ev7HW$5$BFCQJY=%p+Mt466Uf1Dv;hkbTfS}6zMH}Qr;Ab{?^eK z7Gt;{Kk1VofwGO(^5amv3t=I1-oD{;XQe(RXDEHA#NW+>`zNc5Psgh^PoRctcqwUs z>QZ&kxb=?-CP>wOg3vU)6Tr{Xr>E$@U(BCZh}x0n)Xny}oeXFjPuRtCvvR0Pvpekk z0C7bvIWD=Fx3uQHaL{`RyUTE%;@sGtC8?EyM*3=e_VMtpMm(WmsOG3af()0s&I4Vg17;ItzK(qu`L?L0K*vbpK8SH5#rY zDKIqCOA*^``JJ=H1;oRO-o@%7J2U}vkJ zhb}@ZU4~JikoIsXWfvllUlSUIlx0HBn+VQMHZSB-XOJ2q4vOsRjJO5rp025PtF?T=#v%J>=V*!n|^ zpzj4o!Iqh>*K^(Qh7U2WuW9BV#H&AA9C@+dW6a!Ef6%Jln}}>7@!2ywV9JK1qDyHi zO5~GCbepjkPFZ&R)h`ss%BY|`_p8p*zZ}dIS=0&yma|>F6GYKmHYl3BEG|J|_x@G? zXCc?)atA6y%y0nBh-v$T4`!~jdixZ@$WhTaNp~b)9PMdyd{|-X2DVv?iC5}bKpz}K z%V_y&dNH6u%A7!)$BJ^=U9?z%!*%t;e$85B9bAi3xHb&C5;aZ7QNHO{^rstgn--{o z`&Q{h!tIG6AQW~k+?nZTT#Xm0yHD6b^|HOJnEt3A?a>Cps&qP{*muW-r+I4%=S-4) z%f~P5px1Of15bB?6f~3hc3LU(lm49A@1SxlOX)Jds!&of2sW9MOz!M#M{7|b56gQo zWNp~@>0CIci6^kFrRKs7%aA`=N_tRxXxMnG{dq)QM{YKSO^an+yt30M4<_bENg@Jx7kbX# zzK=Xu1D%*sP6;;;ZyGQ~a+YoSzKYIKR64&QrwqlLATVLkT12*X~y@b=K;Z*k>>Rz{U{=?%QLrl6f895AGvGZ2>r#G`BxlayOgpek=XQ%J@Q=i^yim z7USYs0OK~UPUZo2OsFc&>U(^!|Lcl>m9wewrnO9`U_> z6-GckI}>Wjvao90sb!0D?&z3tSF1CCz_(_PQq2VZuuo6+iZOG#7rJWCs}QvykW z6<_k}M-qdatW&cgO|1M5n@b;AA7@u?>?*BUpt2kt8*#21;BrfmpU2+sURabW)Z?w03x&smk-Q*Am- zK7unUgIxK^Nhf{wjDYi%MT1d!(dubjQzv5B0%_JQ7 z&Dmtxl6S`KT4cRD2;m!C1qQN9IQjwZeho+-5zcAT$KHgZ7KBIPu$d&~%A#3aIZi7E z4pNZc4}&$%Db6I2N@;!UI~;AP;FFFPy@IwsT}gL6fBB3dGE|76mhVyg!5B@xgAC*m z>i}W;P=k{e+VaziSQ4jr)<`+G=?jFX2yZ^|g~R9NGoEeS5aHZ->#QrL8=4?XA&pbI zVPRhS0{$R;r&e5p_?8Nd<Y10}5WaET2 zo77Hg(C;PU5uC53`X@57NIJIz^1wD9=Lz$TRnzq~Z+!7&vde+SguyxLwI9+Sb*Q(k z>J_qUp?Ei-YaXb-YDc(tTO8GcWzVBxB+!H}n&*FD_JgYFqMN74$Cjtv_q@>8Qk>vMPPCJ@zau)Y)__fwS=SnOO(+ z6w6QjE)SB~*`c?OH_F?%P7`M4+qi(TjgH~A=+mHv<)OazQ6@%AK(b}EBbZgraC#`f z56ggJDt@-hY2)R7Yng>QZj&#!4rZ;W*-HFXjp=_h^TWpCuRZe!P`yc=(Kp1%hq^x$hqvPga^|MZRz`X zVLmY|zp^V`7S&Am1g?1>$a9b$$%*#Hg6rGS1;;(|S8hw+a|hSUt1OmnF_9JS?J-2m zQ<_fLt!znKvmeq%Okd?GdBe?^elF#`465LT12_(lD+J)(xK%n6=91G|YE|14#%q+B zX#SerwjzV3_Wx^G5eDqb2PSiXUbWC_;+M3Ws?FdTWrdKNc5z-HhF45t#&@c)VP}i1 zS!C_!5s1&x<9MzcGk1;xliLh9TzgjIkH;@;g0#q%pGC#+o46h0iW$y5Y!8q(aPIy1 zr~PPcEZ8WQ&>YPlP--NPb-#7TD%zlgF~(_@0E?LzH1n3#tv+f1IT*ny_=dl{xxzkv zxW9Iw_F4S`zEj}Kr!_z{OpJeZ^vNO@2*d*r2hZiDL%LCt(Yu(5{=Lc~$PjeG!XQ&u z+&Lw9gC;56Ve|ZOQ)g_XRn43K<;fT{^)W0M`C(|Ox6Wvx?)^h@p3ILH47^^3l~5itG)9_NZ?2Yr9;91A8 z9gH_(oFWuYARoTnrT!!Kwb{*p^%PYNO@-VR z9i|(W6~|jLVZV@~U_o&VCCxsD+nM%A!?z%)bQg^`?VS5q5Ck-P5Os#B=(>J*LW#Zm+xEt!7Oo(dW4q0pF1se0O2 z!w}u$FrCUTIuLkt`7JFoitd99w^MhY41f@_=QWs4|7&oHvTZDV4o+&p=n3>{H7F~7 znI%!cr{M>#c0OW3elWEWl&BtoUQr{|gZ*E*D=>INsE>bH2L51|$jn6_w{vxFrI7Y5 zb|`*gecOFyur_9_L`ez?LybprvW6;s-+!IcF3_XFJZ{lrH*8&)nKg5`aDi_=Qbs3< zj5Fj!NuOLCHJ@C}^<37@qFwm!RjK^?e&8hY^QU#gViN^QtR0&}$c*&}seko;-Tz|; zKC>9Gh((Cl$`tf))`c^Dpr}L6PkPr_Om4p0s*vc^X#)B4Woyfm|buDY>GNh`ym#Bu>njeUZ$Uo&zT&UxyV)U{#pniH6eT!jM7qGy3H|596zG3krAF$I(81#(pv0c^2LJk zDfihPW4KT2+v4}_JY5fx{Yy9z>q}vRyj@#Qvv~QTj z)PoO)&s{b>Rn!Lv*U1w(=^qhovn?6+-m$g#L#u+Y zkdiuB4hkyWA=Q7G^qM8xe7MJ1(k!8cY0^X56CGo<*J1PHnts`ov@5u|ptY>Y78>_E zEmzG<)EX;fD=+VOfUNk2=2YUn7%cz*mQPrx9pznNwgZN`1D5_S8@DiDe;x-sc>6F5 z!Q(61#Zl}4r;VzOt9RzAKDi0OmSh1z%H+B6!Yh{eH0>JtJ_398<@R5UZaY*}b$N|H zOgBlBH}WFo`SGH_-wJ?ilK+@)lnZGsBRKWEjYhTcU>h5qxl}Ej|24cH-0};NDp}^( z^W%ekv(jze`?&|Hdibxf^M?i|=manwjLJuYEI}HNfCVILZF4zig<%(q4Vv65-0HWI zUTRoo{(0)^($WMu#4N#$EXHwS=eF9eTsh49yRl@!)Zgh?X`tALoyJ zT14;7$;?yEGs@SL8pt@e2%qELU8j1UJ#kw!-;tc2mSr0aFxBzO8zX zH=ADd(@-{OdRZ>MWJFbON4>R>TPJ3UPJ+r@PeB}fBxURVa8<(79|sE=Py+i^&Di+k z-M|dF{;*4aTXqZ6&cW~Jyd+1K{YiL4pl=614=P0*HZ894)3SihA$nK`x%3a>@w7%H zAwsu)+1`l6iS-`)f`R|kvEH#9MiyQ25 zQ8O(M_~yl16*`F`N?5dQ6u{mKxm_NKx4k@C(8Pfy@)AJ)CukEhUu@HZ{1dmIE3y4h zEOp!u*&~~^T`U;;d1ryytfottC$i&R=7Z@8_hy2+0l=#8lcYM>eiFprpJb^(jQ~RG z|7NuFx&lIj?+7LlH+KQ3YqI^21Uv$gYb`1=wR0Mh9=)OhM*ls8qzFB{oUpDomO3C1 zb}y!eg>r~5-$Q;aR7b*{oLiZb;zy37vs-k;r7iwsw&=vkzDf4>XKjx&e9Kxv&N-_v zZIb_|Q0E^8j5=_$FIt-E<|Sy%ZrEZvMnGCg#mgKBTJbD}$AxGuUN`V7`qN9q$_woc zkS(p|7HLP?%$(3J0rXgp8>Blue+bmx=Bfc6^*V}-rt6xWdDk32^3mT~Jth*M3&|y_ zog3O~T+9lnM0uhWxDf-!O7|U&u=asQ06QaJT|4<7a&{KUX+qQJ247cw9`jrPiw4si zR10dB6AWvr(PL z4(i!IJjfKIUZ+jlFqNoojQ0w`LXY0E{rfWMROg^Cdy`@zp#Mr~k&yJ4`QmC>g{H$A zcVC6vTn;h!%yWGwWtvgLRUd!uV}HpEqB=|sAY9E}>`A#GdzwWCeCK@2HUm*MC#*0n zw>5m^0=m15 zmYImUQW2LL+hbJUoS?=h^!{bz4soOV5)j|VU3;b_WmxG>{#?mt^%SdyR&WR6~>Wx`m*n=kRhVB1}ahc=1&Wc{q z8E>10N+A;m$cXgEc}26%wrX6f_DT+4%v1BDl1M>CUo!ehfV`Mz5CaMxI{jI;8a~)` zzi_-y5N1@pJZq1nK1^n3B!v>$An=8X`Uf|dZ`G~_*Z^y%$v5?3>ZNSg-8o_jzhOXY8?6n%W~Q(;vkr~XLn^LM=QBpu{=w1ZvZI#2_x zOU>Sx8VW>hqGUtxn#_cdZ<2uz^@wEA3|DX*RwSn--papO_3b8?29Ze4WxMVu^SDm~ zNEXT^{Lh^^mM3{FIxZOpan2hPfhRWV5^PYbdR*0dTv%EB5T_iN|K;9=d;wGijl#Nk zFLpN30AR|&2^E+W@9^{tm?mP(q6ft~DqjxOOmtiezPE@`X*kWMOUHI+eOO3I0aWP> zyLA%qZ|$bH2j;{4cIJ61$h~j7h)k55wF3CXo*>?MxlT3KJq$2Opx6wg!3+JpEAUmL zIZVTO{Flx5kW1%!&16o90Vspd{qIqXH#@MaaBt(Pm2wB*kn@x}HA7SeAychOt@Ayn zZdSVkDY?#Rwsel031>9=>US*c{j&Hpwgr|GABb7DRWMt3KOh4JT>nfauQJ>`zG$A;6^nt%aY?%?Y>A2N*slt#^otezzKo(mh<*Z!FNAi* zWbx6L-W^MwHxNKmfA}pvAaA%xL9cQ_84hUXuNnw8Q+D&_PXh=d_9oG6LUY2Z5Mebu zvEH@S-wzV&NurH8AH@KE?%3?ttb9hGLDD;+mBa{6^`|wb4X$7NAnMVtfD4fs!@uBw zwTVz+P-R6~+6QR);queHncf=Uf93XhR@-B4jZFe8cW2<|olOSBcMfNt3~Iz)DQyQ; z`Cwjyb>k3KlGwzZ5)Lc>+X=E;1R~&ezI(@&9}QdE%;SC`VQTInHCBr_KshP1N8E_- z3$3*Nr(bRv|19hS*nX}dtAPEue4(Q8*K`oewQX_vgef|Z^>jKkp37Z@4GrD${04M% z6XM>f8sox)9aXMyI%x@|1>_<&N95@)#z4x&wUsODrK87vQ4|DwMhkb)2iK+*M_Q3UaI#o{RiYv~KjKqI-qE9#vqf z$G1uyK8Lcn3}Ye}n4wcOE36=A6<2iWDEpSRB;;m-+Z}P5CKTiB6Znz>5gP5+m_h@u zg3Hx6`NMEmj8)?#?f%p9lS0;u04QR_qZpr4S>?|}#=KvwS2gw1ad^{6 z1|Iagrq6_C1isep$z(TpmX*UNgvp(cgc+1o6K0fa>r3#Q)GYPXsV>pu7R&yV26k!UPvZjTMG2m-xtQLIQIOl&b55>#IzUcAw0b`vzL%PHd zHm;>X_B|z4yMJ&4Jlc=d7kXMB-Wx6$y+617Xz|5-ZfuSoHncgQ;Z4OMC%Vybb3g)0 z2IEQ*&d6*cUY-oxvMs)%=)lm5uCo>AIN?sRMjKu38gdrn(gyCIk%V-`Dz^Xc zftLynn~DLSr<=&1HAV^Ewhgs+t_+Z|!nN6EdA}mIVTLqGf~uo6>-CmL(dzdTC=3qk z>d^eu8+etmV*&}}JTYCk8M2q?tHJuS&KI&O0}{sS3))}SC@ksA3D@kkE}D)@w1-%+ z@F(D&pP2hAA zd@;LR*aeV1my@@3S7ntSC5LOOV@xv!b0=S5d+agR`mINDs`8NMvb8$(Onv_<8A8Mu z&vkJoR|3Ywu{7rBE(>DUHlc|mZrRHArCHM2YzjR9(u3DF3KHK9^GDQs>@Q*>!8-cG zVQl0s8{mEaX)= z=I%r*Sf|}&bW<6n#yU~tdR{lutkf%?U$Fx+{J9CdCids>I{JLw z0AYeA3n7He0_F44D%}C>{52D_<+6ElBWNV$z^icm>2@@*HL6m~y_g&H5!Nf|4Q6*% zDmc|WcG&Sv%zzD~03IotMD$uY)0LMN+ffm9INz>TKVwS7rd*tR8igK20S;w%Qvib~ zTDjv!&Qm!dwb0Z8O=A7Naq@yRVPC-o*I;)0Oa<%xFZL5`_Q;v@ptmjx#c?Lor#E|)q~^b_Sr|a}*};z*92LRZ9(tFOBYJ{6Nqo*}$z-eP zN?FlE@hnYZS>+dzIn1@48;fK*^CxIdW2*fiIH*5@qTQl2Loh`reL7A!7n5)9Zk6q9 zq>%~wwsplXj+5Z%ZH({wiBMC7hky7buJ?{|->Dz1gyV;4egMIf_wZgx2o56IR{dJ? zL&j1%e7;TZRFVQAxUr;o>8Jn<<}Waq6l@g3i;YkVaSjzWiP+M~geYTXnF^u?kMarRn-{o*PKkK|gKn2U1W*;Yp9 z=x4Q%94>tyri?5O<}FMmwAj;_2)H^~gQubEy~8>#&l{J9DEsf|Gks>~~Z{G?i!@dgzk%m0jFHv>?o=#TUZ;JWZ=j8*{k+ zaB;?N__F{1K1p1cqt{K*A?V)qFO*!#;#pTHTp?0J_K2%4n6n0!SQezH=pSw+>DrKN zp0fo7f?Jah@3)}%weJ=FVOyL4FjV@tBr;dUNCM!k{C7eRL>U9$;$7w zA}?~fOA9}n1q!|iRn75u06rjuiTZ~4USnEm&+EA9Lpgy%J^u-x#;3DQZ+6Nx9zWq3 zpQ!BlGewDt&}J3@s7EiWdRS51{1WgQ*uBKjCC04o+-Tb?Lf>(0potlBD@Xlo&TvQ~ zxrz1lcuO1<3Zr8J;-cdRQWV8wp~!jXo1Y!I=agH%KMtQAZ7${h+NLdY8Jq{8Sv30< zUpfn^{k-7^6q?HS({gN=0+^KJmanEbH^WV%BeC@uko~LzfX*$ha0X9!} zn67Ogh0N8NCC?MEreLxRN2Ist3`4pd=XxTE)$A$yy+l^dmJfUr9G!*^r|~T4Y5K=0 z{4>4jcmu#?m6I}N<{>N=>US+?_Dz28i)SgwxlP~E0Rf$_BbyI-7I$9Al!MvK!>bR< z3D-FCZL_jgts3B}Ei_I$yUQ^LmcuMRHNfTNfsWfzxfsr<4fr!(@51K%-fijum7U&?_Eb1@FrZ`>6I30E$MlT-0^L{ zjTLeAzEffp(I|TLdw{I1?E*%g-XhPHgXOq__n*&3T*K@@%8R~%6xQ5eZ;#H<9CqMr z7=QQUzua`V+!nVJ4j;)VTMve+#$*U_?-}-38*9p* zg1~~b&J>Nkj9?T_jb%KXOF-6Ri>igd+X&eIV8eF9Ixt6%zbk`RV+=pwdy~JDG%+zw z=*O^U&aMHp_x#~=?PPc)=VB&6N$J3hJtjkFL;iG0gzV~KvL$q^eFiSWIC+k{szim@ zInIt(sd5dEMTrsF76iRflt}fHe!EDx^qw-NSB>i2zvq_C_TrCekbrIF9~P-U`c3IGEZzm2CnE|WntD}tZmMQvDcjSNY9H=)E>^u7aojEFZ6o@ooj31U?J>k`*89q zVF#&qErv$|cuBxpVimc*6;4k9qHr)UDp|J}*O$k6(9gGEGqJxmS|`e=f3 z+@RJKj59_wdu z2zoQA=MpXmp}kXH`fG$lD_%+eoWE?CXxKV z%+OL{>td47lNI41mV;G|omt@x>P|4;ng12G3M`h}Uy^%4f#4Exa4bJ-geo|28B_!`FFyV{80=jcng@Hd-6ASP>e3q7e}b6mYSSIays9{ zn7P|>r43rY(goNp* z`UHh}u!lUPUFo7-?LeNIC+{(JWaKYB4LE&u?VE#lQSlfO&Y{w7r8W)JHuntf-)HRc z)_a8#f#0h&yL%Y0=n!rn#+Vw%NP%Mit-k+Yb<~z=eW5+1t=5|pC)Do=!3_IC?0G4>*NVs+!`lk(%x50Ck zeLGZDjplZzH0SVBUH=~tHEjKSG;4rttT-6@onJNe@#bdK*YD_Y9|%#r`F?kc9^Fh| z`UMrT<+6hb%ftMnYA4kho1mfTBQ1k+ABXWG8O-(2eU&2HiRwwoX) zFxCuP+h7D~7`~)#KDxiCck{=|4DO0}xjRu#9yn`f#^L*eHPz)g#X@%nkPNMzges*U_>^!4d85eutz+f!zexC2z|-lQvLKhSmA<$)Wy_OUcS9^u z#A<4+w)Jz!=;U{oOY6;=eZq6!ZbahO3m2VC4`L3C^VYqnPbilyv3p#rek%akSQ&o| zfC=$s==8pvd5-hH3%|zy+!q$@ZvI;HxN5mfAts&sm@);RasvwENZwV3)o&v1<8&V^Kwf{-v0U`7MNsk9IqX-^uqk=tW5wsOI z2Oq_3d*%?d*Oz+Dm;8Sb4-3wm8`uoLe!u*hU5xfl!nu6oJur4P#!|bXc9}oXigzy) z+c9Jbba!u%<*T<8PCl7BEz~LAQ&YoSfUfzpsjKhteD0bPjmV6qAYK7=z)qxm+}}_B zsORKYXH1)ys=MOft$Pw=cyPn|-HE(%K5W~*zCxqPeSAhptD7Gk z#Wkbr75U0aOP8>&`S}O~Iu(lnmVrF>a|PK~UuB=A$i9g9N@UB&&xrwi!Z#eR(LLbU{FUtf~-uB7wvSz zq84fxiX$X}Hgov3s}XM4WVpl~ZCJO3OYRqBF#rBTuE1#@n_^-O-A|q02aFsM4!qhr zjnVfhr#^S9gDLME!m_=IZ@wn8e3C-%K?vp7NC&L_Np0|EH!PnzM>&Zt;HURc_&mIJ z{rCy_#mJ=7r&0|8y?@K<0?vtyMzVNV5kK0Eh98dFl`EmU(a96le%pDMP(iYpxK{R=#}X>%p71yd2MFp)JrwHdquWkcJQks)QBrCycWoO z`1VR-x$^4?v)qPEG}*Z3w_Um++$~6?K5`s%)K-WJZ%4BTHL4PZ4@>AuO;3;9oVqz= z51Tr6NYJYbChWbgJc@7YkapfHV-ijnBeC4=EFh#2lE+I+KkPDg$)j5_2{Cr0`0oF& zn*e9|l`Z)XYAsB((Wdi-l$SsX*%(rMgCBdB@trNkzVkyT}^wV3x#y0JZ z8=f{AJlRFW-2N_BEh_tTaoI&UMSjfE-kvml+ZG3HzfK`FVf%v0Us|CO=f^RwEOJA~%P65u&}UtuaHv(8 zc>g=e9NwXantrx=N+RT9cj#tZqU}Q>eYnkxhx#`cVfGCTdg$3_!kQD{0u&fq>~xrv zDD3{|_lJs7B9E06r;bo9SyIcM_UM1&#szA+6*4$Af1*J7-f3|>h2IxH&%=@6i@7f| zM(0PF)k1b1wVO&36eO+GNXK6K?IIHVyVEH#Zs+q~{dS|)*k2!2vr($Ov40axa|MI@m~*&Y^Z;B~s#m@rF#*5E(nA1#iObc`y4dX0`a z;_$qP@1-c#`YFT^&CBS35Umn{q^Y^&EWB?G-W7SNkC+Vq$%oR<@App{$X5pE0~7A^ zlD^?XUYQ}U;u#N-a`AbzxukOS;G_?YR#+dHyaKNt{$S=m#6<->eGzfdzWcFa;$T*? z-$wL7V=```%ziwaDNt4PeBmV`_b+p5f%exSfj~d4F`u0i0;xr>k1cMB)(0ZII>(~MYvwS-&=EdRm{@L*@9af1A-MOLKzus^Y*HlvsnPwV0CVx3WsOpgtRl2ZU{ogQ?unb_JG$QrgP1u?d;dJuKIctD&kE zqrd!XKYcntmQT@?1Qd7f1zMU?)4ApWQHis^OrcVV;?A_=hmfnT?S;&5`_lDtK32zV zDqwu64NGQQi6h~qni=$DOQWZGTr>w9WVS}&hMdlT6`?8`?iX7-$dQNF;{ORyGhU^$KA;7 z6=rrRpf!2ZENQbS#M>fnS?#XuhfwBS^zbt3lmri|`VC0^fm+LSHIK;Tw2lmaJG|e^ z&vH=Q)j#mlsNy4El~&dnW|#yO*pv#E{f?64b=0#WN_k|637g!?*}BJ2UYq zqlD$g&C_3L{koKJb12}xMXKAK!q;(HS%X5`=|em)8K7O(^Bd=Yra=ibC`c5IldynU34WuanUO6 ziU%TMIxTQ3j_$Bhc$TMsr@vdz+130OzrrI?Gg6BD^ZK^NoxxeSKc))aWoQm7^l9&* zy&+Ha)A{mH&q!ZNs{NCl$I7g+4xj$bUV=tG(_lKhBsM1c zzHw8$dn+PJ)kV@d@0*@qs9Z#uqo!zN8=34MmQnP#4TymaUx%lNuD0W?PVvvyhX&zq z>6~Y7-y1S0Ye;Z>D&Cu%a_sSX)JP~dar%F=K5*Ok3Qu(QMP2`e)+a)W-@emO%Ab?| zIW&1vPt>Q%RdUC*1HR6ftu6J(`qq-Av-;v>b{VGM*>Uc^ViWKPhHd^U>rVAP&ABym zX5u=&p8?t{CI*^k&3UbI?3L#oWAk`M4kh;+72e;A|JE-t=BmH&Ug=`*^oAI*K>fFq z-_Kn-%)VcQ>ZMu&+MIT?`pl;Z``yF%teVKm??g!@Zd%pahwzho2_Kjy2>V7%B z#P90lEl;=ECry#6-LqJ_`o3L5_n)ti&i|Ub?26&FsQ1%l+n1iZz1i_e+H1Y(ySo3J zef0Wsxzr}!B?+pr+n&6aNdfAJ&JePqh53zy0l= z-5mi3<>q`#)-L+BBW<5T$g7v9^3KFt|2s1GV#+N3;Fv|Z&+i^xQCxUy@nX5yFGZZa zCesQg?&tio(E9)UiDhw1=7p}kx6YN_?%K5Im?!yM_3zGU8`!*jnYv@ieXT$BZN;vO kp2c43du%~DI=AG5edo*@7qo-hzB2%Ur>mdKI;Vst0EnOoi2wiq literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/uniongroups.png b/doc/salome/gui/SMESH/images/uniongroups.png new file mode 100755 index 0000000000000000000000000000000000000000..936c3b9f7211807ab4a6627d1fe1a300b76beb2a GIT binary patch literal 10111 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/unionoftwotriangles.png b/doc/salome/gui/SMESH/images/unionoftwotriangles.png new file mode 100755 index 0000000000000000000000000000000000000000..b9d2bdbd7efee9e86df029cf576aceada774dbb6 GIT binary patch literal 8729 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 literal 0 HcmV?d00001 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 index 0000000000000000000000000000000000000000..fb00167a58776f637afa72dd5d889588bd8edf51 GIT binary patch literal 10030 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 literal 0 HcmV?d00001 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 index 0000000000000000000000000000000000000000..e94be3a0fec6c85ce27307cf98ac3cca54c0991d GIT binary patch literal 10718 zcmW++2{=@57oRptq!L1zP$XNDY-6;N#H3;x+o&wrvk%5hMI>w1WSL4*24e|Xhs0oF z3PW~dEZJwqHZx}V=KnqSx%avEx%Zy;ob#UdJ?H$+iMwNECMF^)0ssKS%x_-53jpjg z6WmYj-z~TTZ|F<_0H*-v*RR}1<|TT0JAS9=__QGPkJ{7N6fxy1i+ z-|6!K%CwKSr!0Ss=hDxm*(~R!W>9T9JwJ}S*fOk|;|~%`O zUS5l`=X$XKM(NG%Da5VN56DAa425D0BWrm=^O+ELTKW{QURNgeL9Ay*pp4v$32T3C zz};W(d!N=hIPafg9ZdIm90Yzf&5Ldej5js}wv_U8OS#7`q~wBxFS{2$WZtNtbPd)i zb4?HC631>4rE-WrQk90yGi2gPo(xffYrm-UAq?(&2Q{q+RvGnR6>=C^8O6Z~o_*Fg zKU;7QSQ+~<5LH~BRdC2!NM&$YYnCR+6VS)+`v`N71y+W#ENR= zvaPZoJZf5b(~MdWCM>iBzqc|U6UIusgs*pNQ@d2>TL|2PyqTjOGJeYfT;mplC3!lO zkvuQbx~#ehIicW35beqxiT%mmIf-p%;cU Ij`3Gy_rv*N7NErY+y0W3VXQ?d%Wq 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 oCf+9*`Af|FgU3Gr(Ke|(n;Q#;t literal 0 HcmV?d00001 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 index 0000000000000000000000000000000000000000..5cac5f541a917fbcd84acc09700bb96554c58a32 GIT binary patch literal 9239 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 YI)K&|B$gz;@FQ{U^6g6{7w$d#AKWdIdH?_b literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/index.htm b/doc/salome/gui/SMESH/index.htm deleted file mode 100755 index 3163eee1b..000000000 --- a/doc/salome/gui/SMESH/index.htm +++ /dev/null @@ -1,180 +0,0 @@ - - -Mesh Module Reference Manual - - - - - - - - - - -

It seems javascript is disabled in your browser, please enable it and reload again, or click here to view without javascript

- - - diff --git a/doc/salome/gui/SMESH/index_csh.htm b/doc/salome/gui/SMESH/index_csh.htm deleted file mode 100755 index 867d877c9..000000000 --- a/doc/salome/gui/SMESH/index_csh.htm +++ /dev/null @@ -1,106 +0,0 @@ - - -Mesh Module Reference Manual - - - - - - - - - - - - - \ 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 index b751bd4c8..000000000 --- a/doc/salome/gui/SMESH/index_rhc.htm +++ /dev/null @@ -1,106 +0,0 @@ - - -Mesh Module Reference Manual - - - - - - - - - - - - - \ 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 index 000000000..716ddd90d --- /dev/null +++ b/doc/salome/gui/SMESH/input/1d_meshing_hypo.doc @@ -0,0 +1,167 @@ +/*! + +\page a1d_meshing_hypo_page 1D Meshing Hypotheses + +
+
    +
  • \ref arithmetic_1d_anchor "Arithmetic 1D"
  • +
  • \ref average_length_anchor "Average Length"
  • +
  • \ref deflection_1d_anchor "Deflection 1D"
  • +
  • \ref number_of_segments_anchor "Number of segments"
  • +
  • \ref start_and_end_length_anchor "Start and end length"
  • +
  • \ref automatic_length_anchor "Automatic Length"
  • +
+ +
+\anchor arithmetic_1d_anchor +

Arithmetic 1D hypothesis

+ +Arithmetic 1D 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 + +See Also a sample TUI Script of a +\ref tui_1d_arithmetic "Defining Arithmetic 1D hypothesis" operation. + +
+\anchor deflection_1d_anchor +

Deflection 1D hypothesis

+ +Deflection 1D 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 + +See Also a sample TUI Script of a +\ref tui_deflection_1d "Defining Deflection 1D hypothesis" operation. + +
+\anchor average_length_anchor +

Average Length hypothesis

+ +Average Length 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 + +See Also a sample TUI Script of a +\ref tui_average_length "Defining Average Length" hypothesis +operation. + +
+\anchor number_of_segments_anchor +

Number of segments hypothesis

+ +Number of segments 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 +Hypothesis Construction dialog bog : + +\image html a-nbsegments1.png + +
Equidistant Distribution - all segments will have the same +length, you define only the Number of Segments. + +\image html b-mberofsegments.png + +
Scale Distribution - each next segment differs from the +previous according to the formula: Ai+1 = Ai * k, where \b k is a +Scale Factor. + +\image html a-nbsegments2.png + +
Distribution with Table Density - you input a number of +pairs t - F(t), 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 Conversion mode from +\b Exponent and Cut negative. + +\image html distributionwithtabledensity.png + +
Distribution with Analytic Density - 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 + +See Also a sample TUI Script of a +\ref tui_deflection_1d "Defining Number of Segments" hypothesis +operation. + +
+\anchor start_and_end_length_anchor +

Start and End Length hypothesis

+ +Start and End Length hypothesis allows to divide a geometrical edge +into segments so that the first and the last segments have a specified +length. The length of 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 + +See Also a sample TUI Script of a +\ref tui_start_and_end_length "Defining Start and End Length" +hypothesis operation. + +
+\anchor automatic_length_anchor +

Automatic Length

+ +This hypothesis is automatically applied when you select Assign a +set of hypotheses 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 index 000000000..05ab6dd36 --- /dev/null +++ b/doc/salome/gui/SMESH/input/2d_meshing_hypo.doc @@ -0,0 +1,51 @@ +/*! + +\page a2d_meshing_hypo_page 2D Meshing Hypotheses + +
+
    +
  • \ref max_element_area_anchor "Max Element Area"
  • +
  • \ref length_from_edges_anchor "Length from Edges"
  • +
  • \ref quadrangle_preference_anchor "Quadrangle Preference"
  • +
+ +
+\anchor max_element_area_anchor +

Max Element Area

+ +Max Element Area hypothesis is applied for meshing of 2D faces +composing your geometrical object. Definition of this hypothesis +consists of setting the maximum area of meshing elements (depending on +the chosen meshing algorithm it can be triangles or quadrangles), +which will compose the mesh of these 2D faces. + +\image html a-maxelarea.png + +\image html max_el_area.png + +See Also a sample TUI Script of a +\ref tui_max_element_area "Maximum Element Area" hypothesis +operation. + +
+\anchor length_from_edges_anchor +

Length from Edges

+ +Length from edges hypothesis builds 2D mesh segments having a +length calculated as an average edge length for a given wire. + +See Also a sample TUI Script of a +\ref tui_length_from_edges "Length from Edges" hypothesis operation. + +
+\anchor quadrangle_preference_anchor +

Quadrangle Preference

+ +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. +
+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 index 000000000..40b8ff590 --- /dev/null +++ b/doc/salome/gui/SMESH/input/about_hypo.doc @@ -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): +
    +
  • \ref a1d_meshing_hypo_page "1D Hypotheses" (for meshing of +edges):
  • +
      +
    • \ref arithmetic_1d_anchor "Arithmetic 1D"
    • +
    • \ref average_length_anchor "Average Length"
    • +
    • \ref deflection_1d_anchor "Deflection 1D"
    • +
    • \ref number_of_segments_anchor "Number of segments"
    • +
    • \ref start_and_end_length_anchor "Start and end length"
    • +
    • \ref automatic_length_anchor "Automatic Length"
    • +
    +
  • \ref a2d_meshing_hypo_page "2D Hypotheses" (for meshing of faces):
  • +
      +
    • \ref max_element_area_anchor "Max Element Area"
    • +
    • \ref length_from_edges_anchor "Length from Edges"
    • +
    • \ref quadrangle_preference_anchor "Quadrangle Preference"
    • +
    +
  • 3D Hypothesis (for meshing of volumes):
  • +
      +
    • \ref max_element_volume_hypo_page "Max Element Volume"
    • +
    +
+ +There also exist some +\ref additional_hypo_page "Additional Hypotheses": +
    +
  • Propagation of 1D Hypothesis on opposite edges
  • +
  • Non conform mesh allowed
  • +
  • Quadratic mesh
  • +
+ +The choice of a hypothesis depends on: +
    +
  • the geometrical object (shape) which will be meshed
  • +
  • the algorithm, which will be selected for meshing of this geometrical object (shape)
  • +
+ +*/ \ 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 index 000000000..3864329e4 --- /dev/null +++ b/doc/salome/gui/SMESH/input/about_meshes.doc @@ -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: + +
    +
  • generate meshes on the basis of geometrical shapes produced in the GEOM module,
  • +
  • create your own meshes using the MESH functions destined for modification of generated meshes.
  • +
+ +The topology of a mesh is described by the relationships between its +entities including: + +
    +
  • \b Node — 0D object of a mesh presented by a point with coordinates (x, y, z).
  • +
  • \b Edge — 1D element of a mesh defined by two nodes.
  • +
  • \b Face — 2D element of a mesh defined by three or four edges (closed contour).
  • +
  • \b Volume — 3D element of a mesh defined by several faces.
  • +
+ +        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: + +
    +
  • 2D position. It is a free position defined by only two coordinates x,y.
  • +
  • 3D position. It is a free position defined by three coordinates x,y and z.
  • +
  • Surface position. 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.
  • +
  • Line position. It characterizes the position of a node on a +geometric curve and is defined by the u parameter and the +corresponding curve.
  • +
  • Vertex position. 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.
  • +
+ +

Connections

+ +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: + +
    +
  • A node bounds edges, faces and volumes
  • +
  • An edge bounds faces, and volumes
  • +
  • A face bounds volumes
  • +
  • A volume is bounded by faces, edges and nodes
  • +
  • A face is bounded by edges, and nodes
  • +
  • An edge is bounded by nodes
  • +
+ +You can notice that there are two types of connections: \b inverse and +\b direct connections. + +

Inverse connections

+ +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. + +

Direct connections

+ +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 index 000000000..f197bae0c --- /dev/null +++ b/doc/salome/gui/SMESH/input/about_quality_controls.doc @@ -0,0 +1,44 @@ +/*! + +\page about_quality_controls_page About quality controls + +\n Mesh quality control in MESH is destined for visual control of the generated mesh. + +Application of a definite quality control consists of usage of the +corresponding algorithm, which calculates a value of a definite +geometric characteristic (Area, Length of edges, etc) for all meshing +elements, composing your mesh. Then all meshing elements are colored +according the calculated values. The reference between the coloring of +the meshing elements and these calculated values is shown with the +help of a scalar bar, which is displayed near the presentation of your +mesh. + +There are 1D, 2D and 3D quality controls. + +1D mesh quality controls: +
    +
  • \ref free_borders_page "Free borders"
  • +
  • \ref borders_at_multi_connection_page "Borders at multi-connection"
  • +
  • \ref length_page "Length"
  • +
+ +2D mesh quality controls: +
    +
  • \ref free_edges_page "Free edges"
  • +
  • \ref length_2d_page "Length 2D"
  • +
  • \ref borders_at_multi_connection_2d_page "Borders at multi-connection 2D"
  • +
  • \ref area_page "Area"
  • +
  • \ref taper_page "Taper"
  • +
  • \ref aspect_ratio_page "Aspect ratio"
  • +
  • \ref minimum_angle_page "Minimum angle"
  • +
  • \ref warping_page "Warping"
  • +
  • \ref skew_page "Skew"
  • +
+ +3D mesh quality controls: +
    +
  • \ref aspect_ratio_3d_page "Aspect ratio 3D"
  • +
  • \ref volume_page "Volume"
  • +
+ +*/ \ 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 index 000000000..f55d75d8d --- /dev/null +++ b/doc/salome/gui/SMESH/input/adding_nodes_and_elements.doc @@ -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: + +
    +
  • \ref adding_nodes_anchor "Nodes"
  • +
  • \ref adding_edges_anchor "Edges"
  • +
  • \ref adding_triangles_anchor "Triangles"
  • +
  • \ref adding_quadrangles_anchor "Quadrangles"
  • +
  • \ref adding_polygons_anchor "Polygons"
  • +
  • \ref adding_tetrahedrons_anchor "Tetrahedrons"
  • +
  • \ref adding_hexahedrons_anchor "Hexahedrons"
  • +
  • \ref adding_polyhedrons_anchor "Polyhedrons"
  • +
+ +To add a node or an element to your mesh: +
    +
  1. Select your mesh in the Object Browser or in the 3D viewer.
  2. + +
  3. From the \b Modification menu choose the \b Add item, the +following associated submenu will appear:
  4. + +\image html image146.gif + +From this submenu select the type of element which you would like to add to your mesh. +
+ +See Also sample TUI Scripts of +\ref tui_adding_nodes_and_elements "Adding Nodes and Elements" +operations. + +
+\anchor adding_nodes_anchor +

Adding nodes

+ +\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 + +
+\anchor adding_edges_anchor +

Adding edges

+ +\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 + +
+\anchor adding_triangles_anchor +

Adding triangles

+ +\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 + +
+\anchor adding_quadrangles_anchor +

Adding quadrangles

+ +\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 + +
+\anchor adding_polygons_anchor +

Adding polygons

+ +\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 + +
+\anchor adding_tetrahedrons_anchor +

Adding tetrahedrons

+ +\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 + +
+\anchor adding_hexahedrons_anchor +

Adding hexahedrons

+ +\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 + +
+\anchor adding_polyhedrons_anchor +

Adding polyhedrons

+ +\image html a-createpolyhedralvolume.png + +There are two different ways to add polyhedral volumes. +\n If you select \b Node as Elements Type you will specify the +nodes which will form the faces of your polyhedron by selecting the +nodes in the 3D viewer with pressed Shift button and clicking the \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 Elements Type, you will be able to select the faces +which will form your polyhedron in the 3D viewer with pressed Shift +button. If you've managed to obtain the necessary result, click the +\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 index 000000000..50d8eafb1 --- /dev/null +++ b/doc/salome/gui/SMESH/input/adding_quadratic_elements.doc @@ -0,0 +1,41 @@ +/*! + +\page adding_quadratic_elements_page Adding Quadratic Elements + +\n MESH modules allows you to work with Quadratic Elements. + +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. + +To add a quadratic element to your mesh: +
    +
  1. Select your mesh in the Object Browser or in the 3D viewer.
  2. + +
  3. From the \b Modification menu choose the \b Add item and select +one of the following: + +\image html image152.gif + +To create any Quadratic Element 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 Corner Nodes +(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. +
  4. +
+ + + +*/ diff --git a/doc/salome/gui/SMESH/input/additional_hypo.doc b/doc/salome/gui/SMESH/input/additional_hypo.doc new file mode 100644 index 000000000..9687bdf2d --- /dev/null +++ b/doc/salome/gui/SMESH/input/additional_hypo.doc @@ -0,0 +1,35 @@ +/*! + +\page additional_hypo_page Additional Hypotheses + +\n Additional Hypotheses can be applied as a supplement to the +main hypotheses, introducing additional concepts to mesh creation. + +To define an Additional Hypothesis simply select it in +Create Mesh menu. These hypotheses are actually changes in the +rules of mesh creation and as such don't possess adjustable values. + +

Non Conform mesh allowed hypothesis

+ +Non Conform mesh allowed hypothesis allows to generate non-conform +meshes (that is, meshes having some edges ending on an edge or face of +adjacent elements). + +

Quadratic Mesh

+ +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. + +

Propagation of 1D Hypothesis on opposite edges

+ +Propagation of 1D Hypothesis on opposite edges 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. + +
See Also 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 index 000000000..553b9e935 --- /dev/null +++ b/doc/salome/gui/SMESH/input/area.doc @@ -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). + +To apply the Area quality control to your mesh: +
    +
  1. Display your mesh in the viewer.
  2. + +
  3. Choose Controls > Area or click "Area" button. + +\image html image35.gif +
    "Area" button
    + +Your mesh will be displayed in the viewer with its elements colored +according to the applied mesh quality control criterion: + +\image html image5.jpg +
  4. +
+ +
See Also 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 index 000000000..660b94c3b --- /dev/null +++ b/doc/salome/gui/SMESH/input/aspect_ratio.doc @@ -0,0 +1,44 @@ +/*! + +\page aspect_ratio_page Aspect Ratio + +\n The Aspect Ratio quality criterion for mesh elements reveals +the degree of conformity of a mesh element to the regular element of +its type (with all edges having the same length). + + + +- The Aspect Ratio of a \b triangle 2D element consisting of 3 +nodes is calculated by the formula: + +\image html formula4.png + +- The Aspect Ratio 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 + +To apply the Aspect Ratio quality criterion to your mesh: +
    +
  1. Display your mesh in the viewer.
  2. + +
  3. Choose Controls > Aspect Ratio or click "Aspect +Ratio" button in the toolbar. + +\image html image37.gif +
    "Aspect Ratio" button
    + +Your mesh will be displayed in the viewer with its elements colored +according to the applied mesh quality control criterion: + +\image html image94.jpg +
  4. +
+ +
See Also 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 index 000000000..1f573226c --- /dev/null +++ b/doc/salome/gui/SMESH/input/aspect_ratio_3d.doc @@ -0,0 +1,40 @@ +/*! + +\page aspect_ratio_3d_page Aspect ratio 3D + +\n The Aspect Ratio 3D 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 Aspect Ratio 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 + +To apply the Aspect Ratio 3D quality criterion to your mesh: +
    +
  1. Display your mesh in the viewer.
  2. + +
  3. Choose Controls > Aspect Ratio 3D or click "Aspect Ratio 3D" +button of the toolbar. + +\image html image144.gif +
    "Aspect Ratio 3D" button
    + +Your mesh will be displayed in the viewer with its elements colored +according to the applied mesh quality control criterion: + +\image html image86.jpg +
  4. +
+ +
See Also 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 index 000000000..fa1772524 --- /dev/null +++ b/doc/salome/gui/SMESH/input/basic_meshing_algos.doc @@ -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. + +
    +
  • For meshing of 1D entities (edges):
  • + +
      +
    • Wire Discretisation meshing algorithm - splits a wire into a +number of mesh segments following any 1D hypothesis.
    • +
    • 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.
    • +
    + +
  • For meshing of 2D entities (faces):
  • + +
      +
    • Triangle meshing algorithms (Mefisto and Netgen 1D-2D ) - Faces +are split into triangular elements.
    • +
    • Quadrangle meshing algorithm (Mapping) - Faces are split into +quadrangular elements.
    • +
    + +\image html image123.gif + +\image html image124.gif + +
  • For meshing of 3D entities (volume objects):
  • + +
      +
    • Hexahedron meshing algorithm (i,j,k) - Volumes are split into +hexahedral (cubic) elements.
    • +
    • Tetrahedron (Netgen) meshing algorithm - Volumes are split into +tetrahedral (pyramidal) elements.
    • +
    + +\image html image125.gif + +\image html image126.gif +
+ +There also is a number of more specific algorithms: +
    +
  • \ref projection_algos_page "for meshing by projection of another mesh"
  • +
  • \ref radial_prism_algo_page "for meshing geometrical objects with cavities"
  • +
  • \ref prism_3d_algo_page "for meshing prismatic shapes"
  • +
+ +\ref constructing_meshes_page "Constructing meshes" page describes in +detail how to apply meshing algorithms. + +
See Also 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 index 000000000..8f92d3995 --- /dev/null +++ b/doc/salome/gui/SMESH/input/borders_at_multi_connection.doc @@ -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. + +
See Also 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 index 000000000..a0fe04290 --- /dev/null +++ b/doc/salome/gui/SMESH/input/borders_at_multi_connection_2d.doc @@ -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 + +
See Also 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 index 000000000..5905565d5 --- /dev/null +++ b/doc/salome/gui/SMESH/input/building_compounds.doc @@ -0,0 +1,46 @@ +/*! + +\page building_compounds_page Building Compounds + +\n Compound Mesh is a combination of several meshes. + +To Build a compound: + +\par +From the \b Mesh menu select Build Compound or click "Build +Compound Mesh" button in the toolbar. + +\image html image161.gif +
"Build Compound Mesh" button
+ +\par +The following dialog box will appear: + +\image html buildcompound.png + +\par +
    +
  • \b Name - allows selecting the name of the resulting \b Compound.
  • +
  • \b Meshes - allows selecting the meshes which will be +concatenated. They can be chosen in the Object Browser while holding +\b Ctrl button.
  • +
  • Processing identical groups - allows selecting the method +of processing the namesake existing on the united meshes. +\n They can be either
  • +
      +
    • \b United - all elements of Group1 on Mesh_1 and Group1 on Mesh_2 +become the elements of Group1 on the Compound_Mesh, or
    • +
    • \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.
    • +
    +
  • You can simply unite meshes or choose to Merge coincident nodes +and elements, in which case it is possible to define the \b Tolerance +for this operation.
  • +
+ +\n Example: + +\image html image160.gif + +*/ \ No newline at end of file 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 index 000000000..5cd4e48d9 --- /dev/null +++ b/doc/salome/gui/SMESH/input/changing_orientation_of_elements.doc @@ -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. + +To change orientation of elements: +
    +
  1. Display a mesh or a submesh in the 3D viewer.
  2. +
  3. In the \b Modification menu select the \b Orientation item or click +Orientation button in the toolbar. + +\image html image79.gif +
    "Orientation" button
    + +The following dialog box will appear: + +\image html orientaation1.png + +
      +
    • The main list shall contain the elements which will be +reoriented. You can click on an element in the 3D viewer and it will +be highlighted. After that click the \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 Set filter button +allows to apply a definite filter to selection of elements of your +group.
    • +
    • Apply to all radio button allows to modify the orientation +of all elements of the currently displayed mesh or submesh.
    • +
    • Select from set of fields allows to choose a submesh or an +existing group whose elements will be automatically added to the +list.
    • +
    + +
  4. +
  5. Click the \b Apply or \b OK button to confirm the operation.
  6. +
+ +
See Also 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 index 000000000..858789e9a --- /dev/null +++ b/doc/salome/gui/SMESH/input/clipping.doc @@ -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) around X (Y to Z) and around Y (X to +Z). If the Show preview button is on, you can see the clipping plane +in the 3D Viewer. + +\image html image79.jpg + +If the Auto Apply button is on, you can preview the +cross-section in the 3D Viewer. + +\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 index 000000000..654b6aab8 --- /dev/null +++ b/doc/salome/gui/SMESH/input/constructing_groups_of_specific_elements.doc @@ -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. + +To construct a group of specific elements: + +\par +Right-click on a submesh in the Object Browser and choose the +Construct Group item or select your submesh in the Object Browser and +in the \b Mesh menu choose the Construct Group 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 index 000000000..995ee4377 --- /dev/null +++ b/doc/salome/gui/SMESH/input/constructing_meshes.doc @@ -0,0 +1,112 @@ +/*! + +\page constructing_meshes_page Constructing meshes + +\n Construction of a mesh consists of: +
    +
  • Selecting a geometrical object for meshing
  • +
  • Applying \ref basic_meshing_algos_page "meshing algorithms" and +\ref about_hypo_page "hypotheses" which will be used at computation of +this mesh.
  • +
+ +To construct a mesh: +
    +
  1. In the \b Mesh menu select Create Mesh or click "Create +Mesh" button in the toolbar. + +\image html image32.gif +
    "Create Mesh" button
    + +The following dialog box will appear: + +\image html createmesh-inv.png +
  2. +
  3. 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 +
    "Add" button
    + +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 "Add Hypothesis" button to add a hypothesis. + +\image html image121.gif +
    "Add Hypothesis" button
    + +Click the "Edit Hypothesis" button to define values for the +current hypothesis. + +\image html image122.gif +
    "Edit Hypothesis" button
    + +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 Object Browser the structure of the new mesh will be +displayed as follows: + +\image html image88.jpg + +It contains: +
      +
    • a reference to the geometrical object on the basis of which the mesh has been constructed;
    • +
    • Applied hypotheses folder containing the references to the +hypotheses applied to the construction of the mesh;
    • +
    • Applied algorithms folder containing the references to the +algorithms applied to the construction of the mesh.
    • +
    + +There is an alternative way to create a mesh on an object simply by +clicking Assign a set of hypotheses 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.
  4. +
  5. Now, when everything is ready, select your mesh in the Object +Browser. From the \b Mesh menu select \b Compute or click "Compute" button of the +toolbar. + +\image html image28.gif +
    "Compute" button
    + +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, Show Subshape button allows +visualizing the mesh elements that cause it. + +\image html failed_computation.png + +Publish Subshape button allows importing it in a separate MED +or UNV file. + +NOTE 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: Use existing edges and Use +existing faces. 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. +
  6. +
+ +*/ \ 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 index 000000000..571740e5f --- /dev/null +++ b/doc/salome/gui/SMESH/input/constructing_submeshes.doc @@ -0,0 +1,53 @@ +/*! + +\page constructing_submeshes_page Constructing submeshes + +\n Construction of a submesh consists of: +
    +
  • Selecting a mesh which will encapsulate your submesh
  • +
  • Selecting a geometrical object for meshing
  • +
  • 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
  • +
+ +
To construct a submesh: +\par +From the \b Mesh menu select Local Hyp. or click "Create +Sum-mesh" button in the toolbar. + +\image html image33.gif +
"Create Sum-mesh" button
+ +\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: +
    +
  • a reference to the geometrical object on the basis of which the submesh has been constructed;
  • +
  • Applied hypotheses folder containing the references to the +hypotheses applied to the construction of the submesh;
  • +
  • Applied algorithms folder containing the references to the +algorithms applied to the construction of the submesh.
  • +
+ +
See Also 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 index 000000000..84974a21c --- /dev/null +++ b/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.doc @@ -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. + +To produce a conversion: +
    +
  1. From the Modification menu choose the Convert to/from Quadratic +Mesh item, or click "Convert to/from quadratic" button in the +toolbar. + +\image html image154.gif +
    "Convert to/from quadratic" button
    + +The following dialog box will appear: + +\image html convert.png + +
  2. +
  3. In this dialog box you should select: + +
      +
    • if you wish to convert standard mesh to quadratic or quadratic to standard;
    • +
    • if you wish to place medium nodes of the quadratic mesh on the geometry (meshed object).
    • +
    + +\image html image156.gif +
    Standard mesh (coarse mesh on a torus)
    + +\image html image155.gif +
    Quadratic mesh
    + +
  4. +
  5. Click the \b Apply or \b OK button.
  6. +
+ +*/ \ 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 index 000000000..bba92d58a --- /dev/null +++ b/doc/salome/gui/SMESH/input/creating_groups.doc @@ -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 Create +Group. +\n To create any group you should define the following: +
    +
  • Mesh - 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.
  • +
  • Elements Type - set of radio buttons allows to select the type of +elements which will form your group:
  • +
      +
    • Nodes
    • +
    • Edges
    • +
    • Faces
    • +
    • Volumes
    • +
    +
  • Name field allows to enter the name of your new group.
  • +
+SALOME Platform distinguishes between the two Group types: +Standalone Group and Group on Geometry. + +

Standalone Group

+ +Standalone Group consists of mesh elements, which you can define in +two possible ways. +
    +
  • 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.
  • +
  • Applying Filters. The Set filter 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.
  • +
+To remove a selected element or elements from the list click the +\b Remove button. The Sort List button allows to sort the list of IDs of +mesh elements. +\n Select from 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 Color Number (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 Color number 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 +
In this picture the brown cells belong to a group defined manually.
+ +\image html image131.gif +
In this picture the brown cells belong to the group defined by the criterion +Taper > 0.
+ +See Also a sample TUI Script of a +\ref tui_create_standalone_group "Create a Standalone Group" +operation. + +

Group on Geometry

+ +To create a group on geometry check Group on geometry in the \b Group +\b type field. Group on geometry 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 +
In this picture the cells which belong to a certain face are +selected in green.
+ +See Also 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 index 000000000..3f392f2fc --- /dev/null +++ b/doc/salome/gui/SMESH/input/creating_meshes.doc @@ -0,0 +1,31 @@ +/*! + +\page creating_meshes_page Creating meshes + +
    +
  • \subpage about_meshes_page
  • +
  • \subpage importing_exporting_meshes_page
  • +
  • \subpage constructing_meshes_page
  • +
  • \subpage defining_algos_page
  • +
      +
    • \ref basic_meshing_algos_page
    • +
    • \ref projection_algos_page
    • +
    • \ref radial_prism_algo_page
    • +
    • \ref segments_around_vertex_algo_page
    • +
    • \ref prism_3d_algo_page
    • +
    +
  • \subpage defining_hypo_page
  • +
      +
    • \ref about_hypo_page
    • +
    • \ref a1d_meshing_hypo_page
    • +
    • \ref a2d_meshing_hypo_page
    • +
    • \ref max_element_volume_hypo_page
    • +
    • \ref netgen_2d_3d_hypo_page
    • +
    • \ref additional_hypo_page
    • +
    +
  • \subpage constructing_submeshes_page
  • +
  • \subpage building_compounds_page
  • +
  • \subpage editing_meshes_page
  • +
+ +*/ \ 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 index 000000000..d857165e1 --- /dev/null +++ b/doc/salome/gui/SMESH/input/cutting_quadrangles.doc @@ -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. + +To cut quadrangles: +
    +
  1. Display a mesh or a submesh in the 3D viewer.
  2. +
  3. In the \b Modification menu select the Cutting of quadrangles item or +click "Cutting of quadrangles" button in the toolbar. + +\image html image82.gif +
    "Cutting of quadrangles" button
    + +The following dialog box will appear: + +\image html a-cuttingofquadrangles.png + +\par +
      +
    • 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. Sort +list button allows to sort the list of IDs. \b Filter button allows to +apply a definite filter to the selection of quadrangles.
    • +
    • Apply to all radio button allows to modify the orientation of all +quadrangles of the currently displayed mesh or submesh.
    • +
    • \b Preview - provides a preview of cutting in the viewer.
    • +
    + +
      +
    • \b Criterion +
        +
      • Use diagonal 1-3 and Use diagonal 2-4 allows to +specify the opposite corners which will be connected by the cutting +edge.
      • +
      • Use numeric factor - 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.)
      • +
      +
    • +
    • Select from - allows to choose a submesh or an existing +group whose quadrangle elements will be automatically added to the +list.
    • +
    + +
  4. +
  5. Click the \b Apply or \b OK button to confirm the operation.
  6. +
+ +\image html image52.jpg + +\image html image51.jpg + +
See Also 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 index 000000000..1ddac9f37 --- /dev/null +++ b/doc/salome/gui/SMESH/input/defining_algos.doc @@ -0,0 +1,13 @@ +/*! + +\page defining_algos_page Defining Algorithms + +
    +
  • \subpage basic_meshing_algos_page
  • +
  • \subpage projection_algos_page
  • +
  • \subpage radial_prism_algo_page
  • +
  • \subpage segments_around_vertex_algo_page
  • +
  • \subpage prism_3d_algo_page
  • +
+ +*/ \ 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 index 000000000..5a4eb7503 --- /dev/null +++ b/doc/salome/gui/SMESH/input/defining_hypo.doc @@ -0,0 +1,14 @@ +/*! + +\page defining_hypo_page Defining hypotheses + +
    +
  • \subpage about_hypo_page
  • +
  • \subpage a1d_meshing_hypo_page
  • +
  • \subpage a2d_meshing_hypo_page
  • +
  • \subpage max_element_volume_hypo_page
  • +
  • \subpage netgen_2d_3d_hypo_page
  • +
  • \subpage additional_hypo_page
  • +
+ +*/ \ 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 index 000000000..02779cde6 --- /dev/null +++ b/doc/salome/gui/SMESH/input/deleting_groups.doc @@ -0,0 +1,19 @@ +/*! + +\page deleting_groups_page Deleting Groups + +\n To delete a group in the Main Menu select Mesh -> Delete Groups 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 Delete groups with contents +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 removes groups with their +elements. To delete a group and leave its elements intact, right-click +on the group in the Object Browser and select \b Delete in the pop-up +menu or select the group and choose Edit -> Delete in the Main Menu. + +*/ \ 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 index 000000000..871e110cc --- /dev/null +++ b/doc/salome/gui/SMESH/input/diagonal_inversion_of_elements.doc @@ -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. + +To inverse the diagonal: +
    +
  1. From the \b Modification menu choose the Diagonal inversion item or +click "Diagonal Inversion" button in the toolbar. + +\image html image70.gif +
    "Diagonal Inversion" button
    + +The following dialog box shall appear: + +\image html diagonalinversion.png + +
  2. +
  3. Enter the ID of the required edge in the \b Edge field or select +this edge in the 3D viewer.
  4. +
  5. Click the \b Apply or \b OK button.
  6. +
+ +\image html image38.jpg + +\image html image36.jpg + +
See Also 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 index 000000000..570674017 --- /dev/null +++ b/doc/salome/gui/SMESH/input/display_entity.doc @@ -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 index 000000000..7ba8e54bf --- /dev/null +++ b/doc/salome/gui/SMESH/input/display_mode.doc @@ -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 Object Browser, +and selecting Display Mode, 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 index 000000000..5658f2f4e --- /dev/null +++ b/doc/salome/gui/SMESH/input/editing_groups.doc @@ -0,0 +1,27 @@ +/*! + +\page editing_groups_page Editing groups + +\n To edit an existing group of elements: +
    +
  1. Select your group in the Object Browser and in the \b Mesh menu click +the Edit Group item or "Edit Group" button in the toolbar.
  2. + +\image html image74.gif +
    "Edit Group" button
    + +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. +
  3. Click the \b OK or \b Apply button to confirm modification of the +group.
  4. +
+ +
See Also 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 index 000000000..b36f7849f --- /dev/null +++ b/doc/salome/gui/SMESH/input/editing_meshes.doc @@ -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 Mesh +Creation. + +\image html createmesh-inv3.png + +You can also change values for the current hypothesis by clicking the +"Edit Hypothesis" button. + +\image html image122.gif +
"Edit Hypothesis" button
+ +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 + +
See Also 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 index 000000000..674a9d9b4 --- /dev/null +++ b/doc/salome/gui/SMESH/input/extrusion.doc @@ -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. + +To use extrusion: +
    +
  1. From the \b Modification menu choose the \b Extrusion item or click +"Extrusion" button in the toolbar. + +\image html image91.gif +
    "Extrusion" button
    + +The following dialog box will appear: + +\image html extrusionalongaline1.png + +\image html extrusionalongaline2.png +
  2. + +
  3. In this dialog box you should select: +
      +
    • the type of elements which will be extruded (1D or 2D),
    • +
    • specify the IDs of the elements which will be extruded by +selecting them in the 3D viewer or select the whole mesh or +submesh,
    • +
    • specify the vector along which the elements will be extruded,
    • +
    • number of steps.
    • +
    +
  4. Generate Groups checkbox allows copying the groups of +elements of the source mesh to the newly created one.
  5. + + +
  6. Click the \b Apply or \b OK button.
  7. +
+ +\image html image77.jpg + +\image html image76.jpg + +
See Also 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 index 000000000..ce96f99d9 --- /dev/null +++ b/doc/salome/gui/SMESH/input/extrusion_along_path.doc @@ -0,0 +1,153 @@ +/*! + +\page extrusion_along_path_page Extrusion along a path + +\n In principle, Extrusion along a path 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 + +

Extrusion along a straight edge

(not using base point +or angles)
+ +\image html straight_before.png +
The image shows a 1D path mesh, built on a linear edge, and the initial 2D mesh.
+ +\image html straight_after.png +
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.
+ +

Extrusion along a curvilinear edge

(with and +without angles)
+ +\image html curvi_simple_before.png +
The image shows a 1D path mesh, built on curvilinear edge, and +the initial 2D mesh.
+ +\image html curvi_simple_after.png +
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 Start node.
+ +\image html curvi_angles_after.png +
The same, but using angles {45, 45, 45, 0, -45, -45, -45}
+ +

Extrusion along a sub-mesh

+ +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 Shape (edge), node +#1 as Start node. 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 + +

Extrusion of 2d elements along a sub-mesh

+ +This extrusion bases on the same path mesh as in the previous example +but the third edge of the wire was set as Shape (edge) and node +#4 as Start node. 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 + +

Extrusion of 2d elements along a closed path

+ +\image html circle_simple_before.png +
The image shows a path mesh built on a closed edge +(circle).
+ +\image html circle_simple_after.png +
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.
+ +\image html circle_angles_after.png +
The same, but using angles {45, -45, 45, -45, 45, -45, 45, +-45}
+ +
To use Extrusion along a path: +
    +
  1. From the \b Modification menu choose the Extrusion along a +path item or click "Extrusion along a path" button in the toolbar. + +\image html image101.gif +
    "Extrusion along a path" button
    + +The following dialog box will appear: + +\image html extrusion1.png + +\image html extrusion2.png +
  2. + +
  3. In the dialog box you should: +
      +
    • select the type of elements which will be extruded (1D or 2D),
    • +
    • specify the IDs of the elements which will be extruded by +selecting them in the 3D viewer or Select the whole mesh, submesh +or group, +
    • +
    • define the Path along which the elements will be extruded, +\n Path definition consists of several elements: +
        +
      • \b Mesh - containing a 1D sub-mesh on the edge, along which proceeds the extrusion
      • +
      • Shape (edge) - as the mesh can be complex, the edge is used to define the sub-mesh for the path
      • +
      • Start node - the first or the last node on the edge. It is used to define the direction of extrusion
      • +
      +
    • +
    • Generate Groups checkbox allows copying the groups of +elements of the source mesh to the newly created one.
    • +
    +
  4. + +
  5. There are two optional parameters, which can be very useful: +
      +
    • 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 Base Point around which the shape is rotated is +the mass center of the shape, however, you can specify any point as +the Base Point and the shape will be rotated with respect to this +point. +
    • +
    • 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 "Add" +button and remove them from the list by pressing the "Remove" button. + +\image html image105.gif +
      "Add" button
      + +\image html image106.gif +
      "Remove" button
      + +
    • +
    +
  6. + +
  7. 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. +
  8. +
+ +
See Also 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 index 000000000..824fbd9e0 --- /dev/null +++ b/doc/salome/gui/SMESH/input/free_borders.doc @@ -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. + +
See Also 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 index 000000000..2d51733fc --- /dev/null +++ b/doc/salome/gui/SMESH/input/free_edges.doc @@ -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 +
In this picture some elements of mesh have been deleted and +the "holes" are outlined in red.
+ +
See Also a sample TUI Script of a +\ref tui_free_edges "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 index 000000000..a9a636793 --- /dev/null +++ b/doc/salome/gui/SMESH/input/grouping_elements.doc @@ -0,0 +1,14 @@ +/*! + +\page grouping_elements_page Grouping elements + +
    +
  • \subpage creating_groups_page
  • +
  • \subpage editing_groups_page
  • +
  • \subpage using_operations_on_groups_page
  • +
  • \subpage constructing_groups_of_specific_elements_page
  • +
  • \subpage deleting_groups_page
  • +
  • \subpage selection_filter_library_page
  • +
+ +*/ 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 index 000000000..e016ffff1 --- /dev/null +++ b/doc/salome/gui/SMESH/input/importing_exporting_meshes.doc @@ -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. + +To import a mesh: + +
    +
  1. 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.
  2. +
  3. In the standard Search File dialog box find the file for +importation.
  4. +
  5. Click the \b OK button.
  6. +
+ +\image html meshimportmesh.png + +To export a mesh: + +
    +
  1. Select the object you wish to export.
  2. +
  3. 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.
  4. +
  5. In the standard Search File select a location for the +exported file and enter its name.
  6. +
  7. Click the \b OK button.
  8. +
+ +\image html meshexportmesh.png + +
See Also 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 index 000000000..f09cdea83 --- /dev/null +++ b/doc/salome/gui/SMESH/input/index.doc @@ -0,0 +1,114 @@ +/*! + +\mainpage SMESH Module Reference Documentation + +
    +
  • \subpage introduction_to_mesh_page
  • +
  • \subpage running_mesh_module_page
  • +
  • \subpage introduction_to_mesh_python_page
  • +
  • \subpage creating_meshes_page
  • +
      +
    • \ref about_meshes_page
    • +
    • \ref importing_exporting_meshes_page
    • +
    • \ref constructing_meshes_page
    • +
    • \ref defining_algos_page
    • +
        +
      • \ref basic_meshing_algos_page
      • +
      • \ref projection_algos_page
      • +
      • \ref radial_prism_algo_page
      • +
      • \ref segments_around_vertex_algo_page
      • +
      • \ref prism_3d_algo_page
      • +
      +
    • \ref defining_hypo_page
    • +
        +
      • \ref about_hypo_page
      • +
      • \ref a1d_meshing_hypo_page
      • +
      • \ref a2d_meshing_hypo_page
      • +
      • \ref max_element_volume_hypo_page
      • +
      • \ref netgen_2d_3d_hypo_page
      • +
      • \ref additional_hypo_page
      • +
      +
    • \ref constructing_submeshes_page
    • +
    • \ref building_compounds_page
    • +
    • \ref editing_meshes_page
    • +
    +
  • \subpage viewing_meshes_page
  • +
      +
    • \ref viewing_meshes_overview_page
    • +
    • \ref mesh_infos_page
    • +
    • \ref numbering_page
    • +
    • \ref display_mode_page
    • +
    • \ref display_entity_page
    • +
    • \ref transparency_page
    • +
    • \ref clipping_page
    • +
    +
  • \subpage quality_controls_page
  • +
      +
    • \ref about_quality_controls_page
    • +
    • \ref free_borders_page
    • +
    • \ref borders_at_multi_connection_page
    • +
    • \ref length_page
    • +
    • \ref free_edges_page
    • +
    • \ref length_2d_page
    • +
    • \ref borders_at_multi_connection_2d_page
    • +
    • \ref area_page
    • +
    • \ref taper_page
    • +
    • \ref aspect_ratio_page
    • +
    • \ref minimum_angle_page
    • +
    • \ref warping_page
    • +
    • \ref skew_page
    • +
    • \ref aspect_ratio_3d_page
    • +
    • \ref volume_page
    • +
    +
  • \subpage grouping_elements_page
  • +
      +
    • \ref creating_groups_page
    • +
    • \ref editing_groups_page
    • +
    • \ref using_operations_on_groups_page
    • +
    • \ref constructing_groups_of_specific_elements_page
    • +
    • \ref deleting_groups_page
    • +
    • \ref selection_filter_library_page
    • +
    +
  • \subpage modifying_meshes_page
  • +
      +
    • \ref adding_nodes_and_elements_page
    • +
    • \ref adding_quadratic_elements_page
    • +
    • \ref removing_nodes_and_elements_page
    • +
    • \ref renumbering_nodes_and_elements_page
    • +
    • \ref transforming_meshes_page
    • +
        +
      • \ref translation_page
      • +
      • \ref rotation_page
      • +
      • \ref symmetry_page
      • +
      • \ref sewing_meshes_page
      • +
      • \ref merging_nodes_page
      • +
      • \ref merging_elements_page
      • +
      +
    • \ref moving_nodes_page
    • +
    • \ref mesh_through_point_page
    • +
    • \ref diagonal_inversion_of_elements_page
    • +
    • \ref uniting_two_triangles_page
    • +
    • \ref uniting_set_of_triangles_page
    • +
    • \ref changing_orientation_of_elements_page
    • +
    • \ref cutting_quadrangles_page
    • +
    • \ref smoothing_page
    • +
    • \ref extrusion_page
    • +
    • \ref extrusion_along_path_page
    • +
    • \ref revolution_page
    • +
    • \ref pattern_mapping_page
    • +
    • \ref convert_to_from_quadratic_mesh_page
    • +
    +
  • \subpage smeshpy_interface_page
  • +
  • \subpage tui_scripts_page
  • +
      +
    • \ref tui_creating_meshes_page
    • +
    • \ref tui_viewing_meshes_page
    • +
    • \ref tui_defining_hypotheses_page
    • +
    • \ref tui_quality_controls_page
    • +
    • \ref tui_grouping_elements_page
    • +
    • \ref tui_modifying_meshes_page
    • +
    • \ref tui_transforming_meshes_page
    • +
    +
+ +*/ 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 index 000000000..5b80bb158 --- /dev/null +++ b/doc/salome/gui/SMESH/input/introduction_to_mesh.doc @@ -0,0 +1,64 @@ +/*! + +\page introduction_to_mesh_page Introduction to MESH + +\n \b MESH module of SALOME is destined for: +
    +
  • \ref importing_exporting_meshes_page "import and export of meshes in MED format",
  • +
  • \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: +
      +
    • \ref arithmetic_1d_anchor "Arithmetic 1D"
    • +
    • \ref average_length_anchor "Average Length"
    • +
    • \ref deflection_1d_anchor "Deflection 1D"
    • +
    • \ref number_of_segments_anchor "Number of segments"
    • +
    • \ref start_and_end_length_anchor "Start and end length"
    • +
    • \ref automatic_length_anchor "Automatic Length"
    • +
    • \ref max_element_area_anchor "Max Element Area"
    • +
    • \ref length_from_edges_anchor "Length from Edges"
    • +
    • \ref quadrangle_preference_anchor "Quadrangle Preference"
    • +
    • \ref max_element_volume_hypo_page "Max Element Volume"
    • +
    +
  • +
  • modification of locally generated meshes by +
      +
    • \ref adding_nodes_and_elements_page "Addition" of nodes and elements
    • +
    • \ref removing_nodes_and_elements_page "Removal" of nodes and elements
    • +
    +
  • +
  • \ref creating_groups_page "grouping mesh elements" and +\ref using_operations_on_groups_page "performing operations on these groups"
  • +
  • \ref about_quality_controls_page "quality control" of meshes basing on a set of definite criteria - + +for edges: +
      +
    • \ref length_page "Length of edges"
    • +
    • \ref borders_at_multi_connection_page "Borders at multi-connection"
    • +
    • \ref free_borders_page "Free borders"
    • +
    + +for faces: +
      +
    • \ref area_page "Area"
    • +
    • \ref free_edges_page "Free edges"
    • +
    • \ref borders_at_multi_connection_2d_page "Borders at multi-connection 2D"
    • +
    • \ref length_2d_page "Length 2D"
    • +
    • \ref minimum_angle_page "Minimum angle"
    • +
    • \ref taper_page "Taper"
    • +
    • \ref aspect_ratio_page "Aspect Ratio"
    • +
    • \ref warping_page "Warping"
    • +
    • \ref skew_page "Skew"
    • +
    + +for solids: +
      +
    • \ref aspect_ratio_3d_page "Aspect ratio 3D"
    • +
    • \ref volume_page "Volume"
    • +
    +
  • +
+ +\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 index 000000000..2fcc329a2 --- /dev/null +++ b/doc/salome/gui/SMESH/input/introduction_to_mesh_python.doc @@ -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. + +

Example of 3d mesh generation with NETGEN:

+ +\n from geompy import * +\n import smesh + +# Geometry +\n # an assembly of a box, a cylinder and a truncated cone meshed with tetrahedral. + +# Define values +\n name = "ex21_lamp" +\n cote = 60 +\n section = 20 +\n size = 200 +\n radius_1 = 80 +\n radius_2 = 40 +\n height = 100 + +# Build a box +\n box = MakeBox(-cote, -cote, -cote, +cote, +cote, +cote) + +# Build a cylinder +\n pt1 = MakeVertex(0, 0, cote/3) +\n di1 = MakeVectorDXDYDZ(0, 0, 1) +\n cyl = MakeCylinder(pt1, di1, section, size) + +# Build a truncated cone +\n pt2 = MakeVertex(0, 0, size) +\n cone = MakeCone(pt2, di1, radius_1, radius_2, height) + +# Fuse +\n box_cyl = MakeFuse(box, cyl) +\n piece = MakeFuse(box_cyl, cone) + +# Add in study +\n addToStudy(piece, name) + +# Create a group of faces +\n group = CreateGroup(piece, ShapeType["FACE"]) +\n group_name = name + "_grp" +\n addToStudy(group, group_name) +\n group.SetName(group_name) + +# Add faces in the group +\n faces = SubShapeAllIDs(piece, ShapeType["FACE"]) +\n UnionIDs(group, faces) + +# Create a mesh + +# Define a mesh on a geometry +\n tetra = smesh.Mesh(piece, name) + +# Define 1D hypothesis +\n algo1d = tetra.Segment() +\n algo1d.LocalLength(10) + +# Define 2D hypothesis +\n algo2d = tetra.Triangle() +\n algo2d.LengthFromEdges() + +# Define 3D hypothesis +\n algo3d = tetra.Tetrahedron(smesh.NETGEN) +\n algo3d.MaxElementVolume(100) + +# Compute the mesh +\n tetra.Compute() + +# Create a groupe of faces +\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 index 000000000..e8210294d --- /dev/null +++ b/doc/salome/gui/SMESH/input/length.doc @@ -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 + +
See Also 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 index 000000000..50bab5574 --- /dev/null +++ b/doc/salome/gui/SMESH/input/length_2d.doc @@ -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. + +To apply the Length 2D quality criterion to your mesh: +
    +
  1. Display your mesh in the viewer.
  2. + +
  3. Choose Controls > Length 2D or click "Length 2D" +button in the toolbar. + +\image html image34.gif +
    "Length 2D" button
    + +Your mesh will be displayed in the viewer with its elements colored according to the applied mesh quality control criterion: + +\image html length2d.png +
  4. +
+ +
See Also 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 index 000000000..1dd459161 --- /dev/null +++ b/doc/salome/gui/SMESH/input/max_element_volume_hypo.doc @@ -0,0 +1,16 @@ +/*! + +\page max_element_volume_hypo_page Max Element Volume hypothesis + +\n Max Element Volume hypothesis is applied for meshing of 3D objects +composing your geometrical object. Definition of this hypothesis +consists of setting the maximum volume of 3D meshing elements +(depending on the chosen meshing algorithm it can be \b hexahedrons or +\b tetrahedrons), which will compose the mesh of these 3D objects. + +\image html a-maxelvolume.png + +
See Also 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 index 000000000..fef7cd25a --- /dev/null +++ b/doc/salome/gui/SMESH/input/merging_elements.doc @@ -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 + +
    +
  • \b Name is the name of the mesh whose elements will be merged.
  • +
  • \b Tolerance is a maximum distance between elements sufficient for +merging. +
      +
    • \b Detect button generates the list of coincident elements for the given +\b Tolerance.
    • +
    +
  • +
  • Coincident elements is a list of groupes of elements for +merging. All elements of each group will form one after the operation. +
      +
    • \b Remove button deletes the selected group from the list.
    • +
    • \b Add button adds to the list a group of elements selected in the +viewer with pressed "Shift" key.
    • +
    • Select all checkbox selects all groups.
    • +
    +
  • +
  • Edit selected group list allows editing the selected +group: +

    +\image html add.gif +
    adds to the group the element selected in the viewer.
    +
    +\image html remove.gif +
    removes from the group the selected element.
    +
    +\image html sort.gif +
    moves the selected element to the first position in the +group. This means that all other elements will be merged into this +one.

    +
  • +
+ +
  • To confirm your choice click \b OK or \b Apply button.
  • + + +In this picture you see a triangle which coincides with one of the +elements of the mesh. After we apply Merge Elements functionality, the +triangle will be completely merged with the mesh. + +\image html meshtrianglemergeelem1.png + +
    See Also 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 index 000000000..7c5d62273 --- /dev/null +++ b/doc/salome/gui/SMESH/input/merging_nodes.doc @@ -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. + +To merge nodes of your mesh: +
      +
    1. From the \b Modification choose \b Transformation and from its +sub-menu select the Merge nodes item. The following dialog box +shall appear: + +\image html mergenodes.png + +
        +
      • \b Name is the name of the mesh whose nodes will be merged.
      • +
      • \b Tolerance is a maximum distance between nodes sufficient for +merging. +
          +
        • \b Detect button generates the list of coincident nodes for the given +\b Tolerance.
        • +
        +
      • +
      • Coincident nodes is a list of groupes of nodes for +merging. All nodes of each group will form one after the +operation. +
          +
        • \b Remove button deletes the selected group from the list.
        • +
        • \b Add button adds to the list a group of nodes selected in the +viewer with pressed "Shift" key.
        • +
        • Select all checkbox selects all groups.
        • +
        +
      • +
      • Edit selected group list allows editing the selected +group: +

        +\image html add.gif +
        adds to the group the node selected in the viewer.
        +
        +\image html remove.gif +
        removes from the group the selected node.
        +
        +\image html sort.gif +
        moves the selected node to the first position in the +group. This means that all other nodes will be merged into this +one.

        +
      • +
      +
    2. +
    3. To confirm your choice click \b OK or \b Apply button.
    4. +
    + +\image html merging_nodes1.png + +\image html merging_nodes2.png + +
    See Also 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 index 000000000..259828995 --- /dev/null +++ b/doc/salome/gui/SMESH/input/mesh_infos.doc @@ -0,0 +1,63 @@ +/*! + +\page mesh_infos_page Mesh infos + +\n There are three information boxes: Standard Mesh +Infos, Advanced Mesh Infos and Mesh Element Info. + +
    +\anchor standard_mesh_infos_anchor +

    Standard Mesh Infos

    + +The Standard Mesh Infos 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 Standard Mesh Infos, select your mesh or submesh +in the Object Browser and select Standard Mesh Infos +from the \b Mesh menu or click "Standard Mesh Infos" button +in the toolbar. + +\image html image49.gif +
    "Standard Mesh Infos" button
    + +The following information will be displayed: + +\image html a-standmeshinfo.png + +
    +\anchor advanced_mesh_infos_anchor +

    Advanced Mesh Infos

    + +The Advanced Mesh Infos box gives more information about the mesh, +including the total number of faces and volumes and their geometrical +types. +\n To view the Advanced Mesh Infos, select your mesh or submesh +in the Object Browser and select Advanced Mesh Infos +from the \b Mesh menu or click "Advanced Mesh Infos" button +in the toolbar. + +\image html image50.gif +
    "Advanced Mesh Infos" button
    + +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 + +
    +\anchor mesh_element_info_anchor +

    Mesh Element Info

    + +The Mesh Element Info 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 index 000000000..cd0d68ea9 --- /dev/null +++ b/doc/salome/gui/SMESH/input/mesh_through_point.doc @@ -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. + +To create a mesh passing through a point: +
      +
    1. From the \b Modification menu choose the Mesh through point item or +click "Mesh to pass through a point" button in the toolbar. + +\image html mesh_node_to_point.png +
      "Mesh to pass through a point" button
      + +The following dialog box shall appear: + +\image html meshtopass.png + +
    2. +
    3. Enter the coordinates of the point.
    4. +
    5. 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 Automatic search of the closest node or +select the necessary node manually. \b Preview check-box allows to see +the results of the operation.
    6. +
    7. Click the \b Apply or \b OK button.
    8. +
    + +
    See Also 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 index 000000000..172374575 --- /dev/null +++ b/doc/salome/gui/SMESH/input/minimum_angle.doc @@ -0,0 +1,28 @@ +/*! + +\page minimum_angle_page Minimum angle + +\n Minimum angle mesh quality criterion consists of calculation of the +minimum value of angle between two adjacent sides of a 2D meshing +element (triangle or quadrangle). + +To apply the Minimum angle quality criterion to your mesh: +
      +
    1. Display your mesh in the viewer.
    2. + +
    3. Choose Controls > Minimum angle or click "Minimum Angle" button. + +\image html image38.gif +
      "Minimum Angle" button
      + +Your mesh will be displayed in the viewer with its elements colored +according to the applied mesh quality control criterion: + +\image html image92.jpg +
    4. +
    + +
    See Also 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 index 000000000..d7e1cdb62 --- /dev/null +++ b/doc/salome/gui/SMESH/input/modifying_meshes.doc @@ -0,0 +1,34 @@ +/*! + +\page modifying_meshes_page Modifying meshes + +
      +
    • \subpage adding_nodes_and_elements_page
    • +
    • \subpage adding_quadratic_elements_page
    • +
    • \subpage removing_nodes_and_elements_page
    • +
    • \subpage renumbering_nodes_and_elements_page
    • +
    • \subpage transforming_meshes_page
    • +
        +
      • \ref translation_page
      • +
      • \ref rotation_page
      • +
      • \ref symmetry_page
      • +
      • \ref sewing_meshes_page
      • +
      • \ref merging_nodes_page
      • +
      • \ref merging_elements_page
      • +
      +
    • \subpage moving_nodes_page
    • +
    • \subpage mesh_through_point_page
    • +
    • \subpage diagonal_inversion_of_elements_page
    • +
    • \subpage uniting_two_triangles_page
    • +
    • \subpage uniting_set_of_triangles_page
    • +
    • \subpage changing_orientation_of_elements_page
    • +
    • \subpage cutting_quadrangles_page
    • +
    • \subpage smoothing_page
    • +
    • \subpage extrusion_page
    • +
    • \subpage extrusion_along_path_page
    • +
    • \subpage revolution_page
    • +
    • \subpage pattern_mapping_page
    • +
    • \subpage convert_to_from_quadratic_mesh_page
    • +
    + +*/ \ 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 index 000000000..2c0cd795b --- /dev/null +++ b/doc/salome/gui/SMESH/input/moving_nodes.doc @@ -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. + +To displace a node: +
      +
    1. From the \b Modification menu choose the Move node item or +click "Move Node" button in the toolbar. + +\image html image67.gif +
      "Move Node" button
      + +The following dialog box shall appear: + +\image html movenodes.png + +
    2. +
    3. Enter the ID of the required node in the Node ID 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.
    4. +
    5. Set new coordinates for your node in the \b Coordinates set of fields.
    6. +
    7. Click the \b Apply or \b OK button.
    8. +
    + +\image html moving_nodes1.png + +\image html moving_nodes2.png + +
    See Also 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 index 000000000..395283ca1 --- /dev/null +++ b/doc/salome/gui/SMESH/input/netgen_2d_3d_hypo.doc @@ -0,0 +1,37 @@ +/*! + +\page netgen_2d_3d_hypo_page Netgen 2D and 3D hypotheses + +\n Netgen 2D and Netgen 3D hypotheses work only with Netgen 1D-2D and +Netgen 1D-2D-3D 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 + +
      +
    • Name - allows to define the name for the algorithm (Netgen +2D (or 3D) Parameters by default).
    • +
    • Max Size - maximum linear dimensions for mesh cells.
    • +
    • Second Order - 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".
    • +
    • Fineness - 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.
    • +
    • Growth rate - allows to define how much the linear dimensions of +two adjacent cells can differ (i.e. 0.3 means 30%).
    • +
    • Nb. Segs per Edge and Nb Segs per Radius - allows to define the +minimum number of mesh segments in which edges and radiuses will be +split.
    • +
    • Allow Quadrangles - 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.
    • +
    • Optimize - if this box is checked in, the algorithm will try to +create regular (possessing even sides) elements.
    • +
    + +*/ \ 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 index 000000000..78d8fb414 --- /dev/null +++ b/doc/salome/gui/SMESH/input/numbering.doc @@ -0,0 +1,38 @@ +/*! + +\page numbering_page Numbering + +

    Displaying nodes numbers

    + +In MESH you can display the ID numbers of all nodes of your mesh in +the viewer. + +To display ID numbers of nodes: +
      +
    1. Display your mesh in the viewer
    2. +
    3. Right-click on the mesh in the 3D viewer and from the associated +pop-up menu choose Numbering > Display Nodes #.
    4. +
    + +It will look like as follows: + +\image html image96.jpg + +

    Displaying elements numbers

    + +In MESH you can display the ID numbers of all meshing elements +composing your mesh in the viewer. + +To display ID numbers of elements: +
      +
    1. Display your mesh in the viewer
    2. +
    3. Right-click on the mesh in the 3D viewer and from the associated +pop-up menu choose Numbering > Display Elements #.
    4. +
    + +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 index 000000000..e9ce36172 --- /dev/null +++ b/doc/salome/gui/SMESH/input/pattern_mapping.doc @@ -0,0 +1,135 @@ +/*! + +\page pattern_mapping_page Pattern mapping + +

    About patterns

    + +The pattern describes a mesh to generate: positions of nodes within a +geometrical domain and nodal connectivity of elements. 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 +\.smp file. + +The smp file contains 4 sections: +
      +
    1. The first line holds the number of nodes (N).
    2. + +
    3. The next N lines describe nodes coordinates. Each line holds 2 +coordinates of a node.
    4. + +
    5. 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.
    6. + +
    7. 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.
    8. +
    + +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 + +

    Application of pattern mapping

    + +To apply pattern mapping to a geometrical object: + +From the \b Modification menu choose the Pattern Mapping item or click +"Pattern mapping" button in the toolbar. + +\image html image98.gif +
    "Pattern mapping" button
    + +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: +
      +
    • a face having the number of vertices equal to the number of +key-points in the pattern; the number of key-points on internal +boundaries of a pattern must also be equal to the number of vertices +on internal boundaries of a face;
    • +
    • a vertex to which the first key-point should be mapped;
    • +
    • reverse or not the order of key-points. (The order of vertices of +a face is counterclockwise looking from outside).
    • +
    + +Then you either load a .smp pattern file previously created manually +by clicking on the "Load pattern" 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 projecting nodes on the face 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: +
      +
    1. 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.
    2. +
    3. 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.
    4. +
    + +\image html a-patterntype.png + +\image html a-patterntype1.png + +

    Mapping algorithm

    + +The mapping algorithm is as follows: +
      +
    1. 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. +
    2. + +
    3. 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 +
    4. + +
    5. 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 +
    6. + +
    7. 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 +
    8. +
    + +
    See Also 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 index 000000000..272bef236 --- /dev/null +++ b/doc/salome/gui/SMESH/input/prism_3d_algo.doc @@ -0,0 +1,20 @@ +/*! + +\page prism_3d_algo_page 3D extrusion meshing algorithm + +3D extrusion algorithm can be used for meshing prisms, i.e. 3D Shapes +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 3D extrusion 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 index 000000000..02a617e83 --- /dev/null +++ b/doc/salome/gui/SMESH/input/projection_algos.doc @@ -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. + +Projection 1D 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 Create mesh dialog box), +Projection1D in the list of 1D algorithms and click the +"Add Hypothesis" 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 +Source Vertex being the first point of the Source Edge and the +Target Vertex being the first point of the created \b Edge. For +a group of edges, Source and Target vertices should be +shared by only one edge of the group. If Source and +Target vectors are specified, the elements of the group must be ajacent. + +\n Projection 2D 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 Create mesh dialog box), Projection +2D in the list +of 2D algorithms and click the "Add Hypothesis" button. The +following dialog box will appear: + +\image 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 Source Vertices, which belong to the same edge of the +source face, and two Target Vertices, which belong to the same edge of +the created \b Face. + +\n Projection 3D 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 Create mesh dialog box), Projection +3D 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 3D shape 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 Source Vertices, which belong to the same edge +of the source 3D Shape, and two Target Vertices, which belong to the +same edge of the source 3D Shape. + +*/ + diff --git a/doc/salome/gui/SMESH/input/quality_controls.doc b/doc/salome/gui/SMESH/input/quality_controls.doc new file mode 100644 index 000000000..5a36e7bdb --- /dev/null +++ b/doc/salome/gui/SMESH/input/quality_controls.doc @@ -0,0 +1,23 @@ +/*! + +\page quality_controls_page Quality controls + +
      +
    • \subpage about_quality_controls_page
    • +
    • \subpage free_borders_page
    • +
    • \subpage borders_at_multi_connection_page
    • +
    • \subpage length_page
    • +
    • \subpage free_edges_page
    • +
    • \subpage length_2d_page
    • +
    • \subpage borders_at_multi_connection_2d_page
    • +
    • \subpage area_page
    • +
    • \subpage taper_page
    • +
    • \subpage aspect_ratio_page
    • +
    • \subpage minimum_angle_page
    • +
    • \subpage warping_page
    • +
    • \subpage skew_page
    • +
    • \subpage aspect_ratio_3d_page
    • +
    • \subpage volume_page
    • +
    + +*/ \ 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 index 000000000..756e0329a --- /dev/null +++ b/doc/salome/gui/SMESH/input/radial_prism_algo.doc @@ -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 index 000000000..be1944a48 --- /dev/null +++ b/doc/salome/gui/SMESH/input/removing_nodes_and_elements.doc @@ -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. + +
      +
    • \ref removing_nodes_anchor "Nodes"
    • +
    • \ref removing_elements_anchor "Elements"
    • +
    + +
    +\anchor removing_nodes_anchor +

    Removing nodes

    + +To remove a node: +
      +
    1. Select your mesh in the Object Browser or in the 3D viewer.
    2. + +
    3. From the Modification menu choose Remove and from the associated +submenu select the Remove nodes, or just click "Remove nodes" +button in the toolbar. + +\image html image88.gif +
      "Remove nodes" button
      + +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. +
    4. +
    + +\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 + +
    +\anchor removing_elements_anchor +

    Removing elements

    + +To remove an element: +
      +
    1. Select your mesh in the Object Browser or in the 3D viewer.
    2. + +
    3. From the \b Modification menu choose \b Remove and from the +associated submenu select the Remove elements, or just click +"Remove elements" button in the toolbar. + +\image html remove_elements_icon.png +
      "Remove elements" button
      + +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. +
    4. +
    5. Click OK or Apply to confirm deletion of the specified elements.
    6. +
    + +\image html remove_elements1.png + +\image html remove_elements2.png + +
    See Also 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 index 000000000..9ed74c377 --- /dev/null +++ b/doc/salome/gui/SMESH/input/renumbering_nodes_and_elements.doc @@ -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. + +
      +
    • \ref renumbering_nodes_anchor "Nodes"
    • +
    • \ref renumbering_elements_anchor "Elements"
    • +
    + +
    +\anchor renumbering_nodes_anchor +

    Renumbering nodes

    + +To renumber the nodes of your mesh: +
      +
    1. In the \b Modification menu select \b Renumbering submenu and +choose the \b Nodes item or click "Renumbering nodes" button +in the toolbar. + +\image html image63.gif +
      "Renumbering nodes" button
      + +The following dialog box will appear: + +\image html renumbernodes.png +
    2. + +
    3. Fill the \b Mesh field by selecting your mesh in the Object +Browser or in the 3D viewer.
    4. +
    5. Click the \b Apply or \b OK button to perform the operation.
    6. +
    + +
    +\anchor renumbering_elements_anchor +

    Renumbering elements

    + +To renumber the elements of your mesh: +
      +
    1. In the \b Modification menu select \b Renumbering submenu and +choose the \b Elements item or click "Renumbering elements" +button in the toolbar. + +\image html image64.gif +
      "Renumbering elements" button
      + +The following dialog box will appear: + +\image html renumberelements.png +
    2. + +
    3. Fill the \b Mesh field by selecting your mesh in the Object +Browser or in the 3D viewer.
    4. +
    5. Click the \b Apply or \b OK button to perform the operation.
    6. +
    + +
    See Also 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 index 000000000..60ee2ab8e --- /dev/null +++ b/doc/salome/gui/SMESH/input/revolution.doc @@ -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). + +To apply revolution: +
      +
    1. From the \b Modification menu choose the \b Revolution item or click +"Revolution" button in the toolbar. + +\image html image92.gif +
      "Revolution" button
      + +The following dialog box shall appear: + +\image html revolution1.png + +\image html revolution2.png +
    2. + +
    3. +In this dialog box you should specify: +
        +
      • the type of elements which will be extruded (1D or 2D),
      • +
      • specify the IDs of the elements which will be revolved by +selecting them in the 3D viewer or select the whole mesh or +submesh,
      • +
      • specify the axis (point and vector) around which the elements will +be revolved,
      • +
      • angle of rotation,
      • +
      • number of steps,
      • +
      • tolerance of rotation
      • +
      +
    4. Generate Groups checkbox allows copying the groups of +elements of the source mesh to the newly created one.
    5. + + +
    6. Click the \b Apply or \b OK button.
    7. +
    + +\image html image78.jpg + +
    See Also 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 index 000000000..bf2ca4978 --- /dev/null +++ b/doc/salome/gui/SMESH/input/rotation.doc @@ -0,0 +1,37 @@ +/*! + +\page rotation_page Rotation + +\n This geometrical operation allows to rotate in space your mesh or +some of its elements. + +To rotate your mesh: +\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: +
      +
    • \b Axis: point and vector
    • +
    • \b Angle of rotation
    • +
    + +\n Toggle the corresponding checkbox to Select whole mesh, submesh or group. +\n When Move elements radio button is selected, the source mesh (or elements) is created at the new location and erased from its previous location +\n When Copy elements 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 Create as new mesh 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 Copy groups 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 + +
    See Also 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 index 000000000..d7a794474 --- /dev/null +++ b/doc/salome/gui/SMESH/input/running_mesh_module.doc @@ -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 +
    "Mesh" icon
    + +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 index 000000000..f6250d2e5 --- /dev/null +++ b/doc/salome/gui/SMESH/input/segments_around_vertex_algo.doc @@ -0,0 +1,17 @@ +/*! + +\page segments_around_vertex_algo_page Segments around Vertex + +\n Segments around Vertex 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 index 000000000..613febb9c --- /dev/null +++ b/doc/salome/gui/SMESH/input/selection_filter_library.doc @@ -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 Tools / Selection filter library. + +\image html selectionfilterlibrary.png + +Library file name shows the path and the file name where your +filters will be stored. By clicking the Browse button you can load an +existing filter library. +\n Names of filters lists the filters created or uploaded for +the current study. You can \b Add or \b Delete filters. +\n In Filter name 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 Entity type. +\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 Entity type has its specific list of criteria, however all +filters have common syntax. For each criterion you should specify the +Threshold Value 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 Standalone Group using filters (for this click +Set Filters button in the Create Group menu), the menu +for setting filters looks a bit differently. Toggling Insert filter +in viewer 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 Initial Selection or the Current Group. +\n Copy from... button gives you a possibility to load an +existing filter from Selection filter library and Add +to... button gives you a possibility to save your current filter +in the Library. + +\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 index 000000000..e40f8fdc8 --- /dev/null +++ b/doc/salome/gui/SMESH/input/sewing_meshes.doc @@ -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: +
      +
    • \ref free_borders_anchor "Free borders"
    • +
    • \ref conform_free_borders_anchor "Conform free borders"
    • +
    • \ref border_to_side_anchor "Border to side"
    • +
    • \ref side_elements_anchor "Side elements"
    • +
    + +To sew elements of different meshes: +
      +
    1. From the \b Modification menu choose the \b Transformation item +and from its sub-menu select the \b Sewing item.
    2. +
    3. Check in the dialog box one of the radio buttons corresponding to +the type of sewing operation you would like to perform.
    4. +
    5. Fill the other fields available in the dialog box.
    6. +
    7. Click the \b OK or \b Apply button to perform the operation of sewing.
    8. +
    + +
    +\anchor free_borders_anchor +

    Sew free borders

    + +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: +
      +
    • the first node specifies beginning of the border;
    • +
    • the second node specifies the part of the border which should be +considered (as far as the free border usually forms a closed +contour);
    • +
    • the last node specifies the end of the border.
    • +
    + +You can select these nodes in the 3D viewer or define by its id. + +The first and the second nodes should belong to the same link of a +face. The second and the last nodes of a border can be the same. The +first and the last nodes of two borders can be the same. The +corresponding end nodes of two borders will be merged. Intermediate +nodes of two borders will be either merged or inserted into faces of +the opposite border. + +The sewing algorithm is as follows: +
      +
    1. 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;
    2. +
    3. 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.
    4. +
    + +\image html image22.jpg + +See Also a sample TUI Script of a +\ref tui_sew_free_borders "Sew Free Borders" operation. + +
    +\anchor conform_free_borders_anchor +

    Sew conform free borders

    + +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 + +See Also a sample TUI Script of a +\ref tui_sew_conform_free_borders "Sew Conform Free Borders" +operation. + +
    +\anchor border_to_side_anchor +

    Sew border to side

    + +"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. +
      +
    1. 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.
    2. +
    3. 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.
    4. +
    + +\image html image30.jpg + +See Also a sample TUI Script of a +\ref tui_sew_meshes_border_to_side "Sew Border to Side" operation. + +
    +\anchor side_elements_anchor +

    Sew side elements

    + +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. + +See Also 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 index 000000000..582ada3a1 --- /dev/null +++ b/doc/salome/gui/SMESH/input/skew.doc @@ -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 + +To apply the Skew quality criterion to your mesh: +
      +
    1. Display your mesh in the viewer.
    2. + +
    3. Choose Controls > Skew or click "Skew" button of the toolbar. + +\image html image40.gif +
      "Skew" button
      + +Your mesh will be displayed in the viewer with its elements colored +according to the applied mesh quality control criterion: + +\image html image93.jpg +
    4. +
    + +
    See Also 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 index 000000000..4fbf3d3b5 --- /dev/null +++ b/doc/salome/gui/SMESH/input/smeshpy_interface.doc @@ -0,0 +1,10 @@ +/*! + +\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 Also, please see \ref smeshDC "documentation for smesh.py" + +*/ \ No newline at end of file diff --git a/doc/salome/gui/SMESH/input/smoothing.doc b/doc/salome/gui/SMESH/input/smoothing.doc new file mode 100644 index 000000000..f1991d62b --- /dev/null +++ b/doc/salome/gui/SMESH/input/smoothing.doc @@ -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. + +To apply smoothing to the elements of your mesh: +
      +
    1. Display a mesh or a submesh in the 3D viewer.
    2. +
    3. In the \b Modification menu select the \b Smoothing item or click +"Smoothing" button in the toolbar. + +\image html image84.gif +
      "Smoothing" button
      + +The dialog box contains the following fields which should be +specified: + +\image html smoothing.png + +
        +
      • Id Elements 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).
      • +
      • Select whole mesh, submesh or group - smoothing is applied +to the whole mesh or its part.
      • +
      • Fixed nodes ids: 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.
      • +
      • Smoothing Method: +
          +
        • \b Laplacian smoothing pulls a node toward the center of +surrounding nodes directly connected to that node along an element +edge. +
        • \b Centroidal smoothing pulls a node toward the +element-area-weighted centroid of the surrounding elements.
        • + +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. +
        + +\image html image83.gif + +
      • +
      • Iteration limit: 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.
      • +
      • Max. aspect ratio allows to define the quality at which the +smoothing algorithm should stop the iterations as the target of the +operation has been reached.
      • +
      • When in parametric space 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.
      • +
      + +
    4. +
    5. Click the \b Apply or \b OK button to confirm the operation.
    6. +
    + +\image html smoothing1.png + +\image html smoothing2.png + +
    See Also 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 index 000000000..efbad6595 --- /dev/null +++ b/doc/salome/gui/SMESH/input/symmetry.doc @@ -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. + +To apply symmetry to your mesh: +\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: +
      +
    • one point
    • +
    • one axis (point and vector)
    • +
    • one plane (point and normal)
    • +
    + + +\n Toggle the corresponding checkbox to Select whole mesh, submesh or group. +\n When Move elements radio button is selected, the source mesh (or elements) is created at the new location and erased from its previous location +\n When Copy elements 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 Create as new mesh 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 Copy groups checkbox allows copying the groups of elements of the source mesh to the newly created one. + +. +\par + +
    See Also 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 index 000000000..a207990b7 --- /dev/null +++ b/doc/salome/gui/SMESH/input/taper.doc @@ -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 + +
    To apply the Taper quality criterion to your mesh: + +
      +
    1. Display your mesh in the viewer.
    2. + +
    3. Choose Controls > Taper or click "Taper" button in +the toolbar. + +\image html image36.gif +
      "Taper" button
      + +Your mesh will be displayed in the viewer with its elements colored +according to the applied mesh quality control criterion: + +\image html image90.jpg +
    4. +
    + +
    See Also 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 index 000000000..206c6401c --- /dev/null +++ b/doc/salome/gui/SMESH/input/transforming_meshes.doc @@ -0,0 +1,14 @@ +/*! + +\page transforming_meshes_page Transforming meshes + +
      +
    • \subpage translation_page
    • +
    • \subpage rotation_page
    • +
    • \subpage symmetry_page
    • +
    • \subpage sewing_meshes_page
    • +
    • \subpage merging_nodes_page
    • +
    • \subpage merging_elements_page
    • +
    + +*/ \ 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 index 000000000..1f48901d5 --- /dev/null +++ b/doc/salome/gui/SMESH/input/translation.doc @@ -0,0 +1,35 @@ +/*! + +\page translation_page Translation + +\n This geometrical operation allows to translate in space your mesh +or some of its elements. + +To translate your mesh: +\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: +
      +
    • two points (starting and ending)
    • +
    • one vector
    • +
    +Toggle the corresponding checkbox to Select whole mesh, submesh or +group. +\n When Move elements radio button is selected, the source mesh (or elements) is created at the new location and erased from its previous location +\n When Copy elements 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 Create as new mesh 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 Copy groups checkbox allows copying the groups of elements of the source mesh to the newly created one. + +
    See Also 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 index 000000000..91734abf8 --- /dev/null +++ b/doc/salome/gui/SMESH/input/transparency.doc @@ -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 index 000000000..f174e863f --- /dev/null +++ b/doc/salome/gui/SMESH/input/tui_creating_meshes.doc @@ -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. + +
    +

    Construction of a Mesh

    + +\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 + +
    +\anchor tui_construction_submesh +

    Construction of a Submesh

    + +\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 + +
    +\anchor tui_editing_mesh +

    Editing of a mesh

    + +\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 + +
    +\anchor tui_export_mesh +

    Export of a Mesh

    + +\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 + +
    +

    How to mesh a cylinder with hexahedrons?

    +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 index 000000000..bd9fbbb10 --- /dev/null +++ b/doc/salome/gui/SMESH/input/tui_defining_hypotheses.doc @@ -0,0 +1,385 @@ +/*! + +\page tui_defining_hypotheses_page Defining Hypotheses and Algorithms + +

    Defining 1D Hypotheses

    + +
    +\anchor tui_1d_arithmetic +

    1D Arithmetic

    + +\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 + +
    +\anchor tui_deflection_1d +

    Deflection 1D and Number of Segments

    + +\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 + +
    +\anchor tui_start_and_end_length +

    Start and End Length

    + +\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 + +
    +\anchor tui_average_length +

    Average Length

    + +\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 + +

    Defining 2D and 3D hypotheses

    + +
    +\anchor tui_max_element_area +

    Maximum Element Area

    + +\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 + +
    +\anchor tui_max_element_volume +

    Maximum Element Volume

    + +\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 + +
    +\anchor tui_length_from_edges +

    Length from Edges

    + +\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 + +

    Defining Additional Hypotheses

    + +
    +\anchor tui_propagation +

    Propagation

    + +\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 + +
    +\anchor tui_defining_meshing_algos +

    Defining Meshing Algorithms

    + +\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 index 000000000..8b9f6391c --- /dev/null +++ b/doc/salome/gui/SMESH/input/tui_grouping_elements.doc @@ -0,0 +1,277 @@ +/*! + +\page tui_grouping_elements_page Grouping Elements + +
    +\anchor tui_create_standalone_group +

    Create a Standalone Group

    + +\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 + +
    +\anchor tui_create_group_on_geometry +

    Create a Group on Geometry

    + +\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 with default name +aSmeshGroup2 = quadra.GroupOnGeom(aGeomGroupE) + +salome.sg.updateObjBrowser(1) +\endcode + +
    +\anchor tui_edit_group +

    Edit a Group

    + +\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 + +
    +\anchor tui_union_of_two_groups +

    Union of two groups

    + +\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 + +
    +\anchor tui_intersection_of_two_groups +

    Intersection of two groups

    + +\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 + +
    +\anchor tui_cut_of_two_groups +

    Cut of two groups

    + +\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 index 000000000..342968ff7 --- /dev/null +++ b/doc/salome/gui/SMESH/input/tui_modifying_meshes.doc @@ -0,0 +1,817 @@ +/*! + +\page tui_modifying_meshes_page Modifying Meshes + +
    +\anchor tui_adding_nodes_and_elements +

    Adding Nodes and Elements

    + +
    +\anchor tui_add_node +

    Add Node

    + +\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 + +
    +\anchor tui_add_edge +

    Add Edge

    + +\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 + +
    +\anchor tui_add_triangle +

    Add Triangle

    + +\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 + +
    +\anchor tui_add_quadrangle +

    Add Quadrangle

    + +\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 + +
    +\anchor tui_add_tetrahedron +

    Add Tetrahedron

    + +\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 + +
    +\anchor tui_add_hexahedron +

    Add Hexahedron

    + +\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 + +
    +\anchor tui_add_polygon +

    Add Polygon

    + +\code +import math +import salome + +import smesh + +# create an empty mesh structure +mesh = smesh.Mesh() + +# a method to build a polygonal mesh element with 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 + +
    +\anchor tui_add_polyhedron +

    Add Polyhedron

    + +\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 + +
    +\anchor tui_removing_nodes_and_elements +

    Removing Nodes and Elements

    + +
    +\anchor tui_removing_nodes +

    Removing Nodes

    + +\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 + +
    +\anchor tui_removing_elements +

    Removing Elements

    + +\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 + +
    +\anchor tui_renumbering_nodes_and_elements +

    Renumbering Nodes and Elements

    + +\code +import SMESH_mechanic + +mesh = SMESH_mechanic.mesh + +mesh.RenumberNodes() + +mesh.RenumberElements() +\endcode + +
    +\anchor tui_moving_nodes +

    Moving Nodes

    + +\code +import SMESH_mechanic + +mesh = SMESH_mechanic.mesh + +# move node #38 +mesh.MoveNode(38, 20., 10., 0.) +\endcode + +
    +\anchor tui_mesh_through_point +

    Mesh through point

    + +\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 + +
    +\anchor tui_diagonal_inversion +

    Diagonal Inversion

    + +\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 + +
    +\anchor tui_uniting_two_triangles +

    Uniting two Triangles

    + +\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 + +
    +\anchor tui_uniting_set_of_triangles +

    Uniting a Set of Triangles

    + +\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 + +
    +\anchor tui_orientation +

    Orientation

    + +\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 + +
    +\anchor tui_cutting_quadrangles +

    Cutting Quadrangles

    + +\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 + +
    +\anchor tui_smoothing +

    Smoothing

    + +\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 + +
    +\anchor tui_extrusion +

    Extrusion

    + +\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 + +
    +\anchor tui_extrusion_along_path +

    Extrusion along a Path

    + +\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 + +
    +\anchor tui_revolution +

    Revolution

    + +\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 + +
    +\anchor tui_pattern_mapping +

    Pattern Mapping

    + +\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 index 000000000..e1b8b700e --- /dev/null +++ b/doc/salome/gui/SMESH/input/tui_quality_controls.doc @@ -0,0 +1,575 @@ +/*! + +\page tui_quality_controls_page Quality Controls + +
    +\anchor tui_free_borders +

    Free Borders

    + +\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 + +
    +\anchor tui_borders_at_multiconnection +

    Borders at Multiconnection

    + +\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 + +
    +\anchor tui_length_1d +

    Length 1D

    + +\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 + +
    +\anchor tui_free_edges +

    Free Edges

    + +\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 + +
    +\anchor tui_length_2d +

    Length 2D

    + +\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 + +
    +\anchor tui_borders_at_multiconnection_2d +

    Borders at Multiconnection 2D

    + +\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 + +
    +\anchor tui_area +

    Area

    + +\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 + +
    +\anchor tui_taper +

    Taper

    + +\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 + +
    +\anchor tui_aspect_ratio +

    Aspect Ratio

    + +\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 + +
    +\anchor tui_minimum_angle +

    Minimum Angle

    + +\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 + +
    +\anchor tui_warping +

    Warping

    + +\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 + +
    +\anchor tui_skew +

    Skew

    + +\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 + +
    +\anchor tui_aspect_ratio_3d +

    Aspect Ratio 3D

    + +\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 + +
    +\anchor tui_volume +

    Volume

    + +\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 index 000000000..4c19b9d7b --- /dev/null +++ b/doc/salome/gui/SMESH/input/tui_scripts.doc @@ -0,0 +1,15 @@ +/*! + +\page tui_scripts_page TUI Scripts + +
      +
    • \subpage tui_creating_meshes_page
    • +
    • \subpage tui_viewing_meshes_page
    • +
    • \subpage tui_defining_hypotheses_page
    • +
    • \subpage tui_quality_controls_page
    • +
    • \subpage tui_grouping_elements_page
    • +
    • \subpage tui_modifying_meshes_page
    • +
    • \subpage tui_transforming_meshes_page
    • +
    + +*/ \ 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 index 000000000..163afe0e4 --- /dev/null +++ b/doc/salome/gui/SMESH/input/tui_transforming_meshes.doc @@ -0,0 +1,322 @@ +/*! + +\page tui_transforming_meshes_page Transforming Meshes + +

    Transforming Meshes

    + +
    +\anchor tui_translation +

    Translation

    + +\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 + +
    +\anchor tui_rotation +

    Rotation

    + +\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 + +
    +\anchor tui_symmetry +

    Symmetry

    + +\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 + +
    +\anchor tui_merging_nodes +

    Merging Nodes

    + +\code +import SMESH_mechanic +mesh = SMESH_mechanic.mesh + +# merge nodes +Tolerance = 25.0 + +GroupsOfNodes = mesh.FindCoincidentNodes(Tolerance) +mesh.MergeNodes(GroupsOfNodes) +\endcode + +
    +\anchor tui_merging_elements +

    Merging Elements

    + +\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 + +

    Sewing Meshes

    + +
    +\anchor tui_sew_meshes_border_to_side +

    Sew Meshes Border to Side

    + +\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 + +
    +\anchor tui_sew_conform_free_borders +

    Sew Conform Free Borders

    + +\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 + +
    +\anchor tui_sew_free_borders +

    Sew Free Borders

    + +\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 + +
    +\anchor tui_sew_side_elements +

    Sew Side Elements

    + +\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 index 000000000..59681c16b --- /dev/null +++ b/doc/salome/gui/SMESH/input/tui_viewing_meshes.doc @@ -0,0 +1,47 @@ +/*! + +\page tui_viewing_meshes_page Viewing Meshes + +
    +\anchor tui_viewing_mesh_infos +

    Viewing Mesh Infos

    + +\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 index 000000000..fc3a74aed --- /dev/null +++ b/doc/salome/gui/SMESH/input/uniting_set_of_triangles.doc @@ -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. + +To union several triangles: +
      +
    1. Display a mesh or a submesh in the 3D viewer.
    2. +
    3. In the \b Modification menu select the Union of triangles +item or click "Union of triangles" button in the toolbar. + +\image html image80.gif +
      "Union of triangles" button
      + +The following dialog box will appear: + +\image html a-unionoftriangles.png + +
        +
      • The main list 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 Set filter button allows to apply a +definite filter to selection of triangles.
      • +
      • Apply to all radio button allows to modify connectivity and +type of all triangles of the currently displayed mesh or submesh.
      • +
      • \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.)
      • +
      • Select from set of fields allows to choose a submesh or an +existing group whose triangle elements will be automatically added to +the list.
      • +
      + +
    4. +
    5. Click the \b Apply or \b OK button to confirm the operation.
    6. +
    + +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 + +
    See Also 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 index 000000000..36d46f688 --- /dev/null +++ b/doc/salome/gui/SMESH/input/uniting_two_triangles.doc @@ -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. + +To unite two triangles: +
      +
    1. From the \b Modification menu choose the Union of two +triangles item or click "Union of two triangles" button +in the toolbar. + +\image html image71.gif +
      "Union of two triangles" button
      + +The following dialog box shall appear: + +\image html unionoftwotriangles.png + +
    2. +
    3. Enter the ID of the required edge in the \b Edge field or select +this edge in the 3D viewer.
    4. +
    5. Click the \b Apply or \b OK button.
    6. +
    + +\image html uniting_two_triangles1.png + +\image html uniting_two_triangles2.png + +
    See Also 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 index 000000000..c6d4d75a7 --- /dev/null +++ b/doc/salome/gui/SMESH/input/using_operations_on_groups.doc @@ -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. +
      +
    • \ref union_anchor "Union"
    • +
    • \ref intersection_anchor "Intersection"
    • +
    • \ref cut_anchor "Cut"
    • +
    + + +
    +\anchor union_anchor +

    Union of two groups

    + +This operation allows to create a new group in such a way that all +mesh elements that are present in the initial groups will be added to +the new one. + +To union two groups: +
      +
    1. In the \b Mesh menu select the Union Groups 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 +
      Group1
      + +\image html image134.gif +
      Group2
      + +\image html image135.gif +
      Group12
      +
    2. +
    3. Click the \b Ok or \b Apply button to confirm creation of the group.
    4. +
    + +See Also a sample TUI Script of a +\ref tui_union_of_two_groups "Union of two Groups" operation. + +
    +\anchor intersection_anchor +

    Intersection of two groups

    + +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. + +To intersect two groups: +
      +
    1. In the \b Mesh menu select the Intersect Groups 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 +
      Group1
      + +\image html image134.gif +
      Group2
      + +\image html image136.gif +
      Group12a
      +
    2. +
    3. Click the \b Ok or \b Apply button to confirm creation of the group.
    4. +
    + +See Also a sample TUI Script of an +\ref tui_intersection_of_two_groups "Intersection of two Groups" operation. + +
    +\anchor cut_anchor +

    Cut of two groups

    + +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. + +To cut two groups: +
      +
    1. In the \b Mesh menu select the Cut Groups 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 +
      Group1
      + +\image html image134.gif +
      Group2
      + +\image html image137.gif +
      Group12b
      +
    2. +
    3. Click the \b Ok or \b Apply button to confirm creation of the +group.
    4. +
    + +See Also 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 index 000000000..aac10da54 --- /dev/null +++ b/doc/salome/gui/SMESH/input/viewing_meshes.doc @@ -0,0 +1,15 @@ +/*! + +\page viewing_meshes_page Viewing meshes + +
      +
    • \subpage viewing_meshes_overview_page
    • +
    • \subpage mesh_infos_page
    • +
    • \subpage numbering_page
    • +
    • \subpage display_mode_page
    • +
    • \subpage display_entity_page
    • +
    • \subpage transparency_page
    • +
    • \subpage clipping_page
    • +
    + +*/ \ 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 index 000000000..5cddd5db3 --- /dev/null +++ b/doc/salome/gui/SMESH/input/viewing_meshes_overview.doc @@ -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 VTK 3D Viewer. +Alternatively click Display only to hide all other objects at +the same time. + +VTK 3D Viewer is detailly described in the documentation on GUI module. +\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 + +
      +
    • Hide all - allows to hide all objects in the viewer.
    • +
    • Update - refreshes the presentation of your mesh in the +Object Browser, applying all recent changes.
    • +
    • \ref advanced_mesh_infos_anchor "Advanced Mesh Infos" - provides +more detailed information about the mesh.
    • +
    • \ref standard_mesh_infos_anchor "Standard Mesh Infos" - provides +basic information about the mesh.
    • +
    • \ref mesh_element_info_anchor "Mesh Element Info" - provides basic +information about the selected element of the mesh.
    • +
    • \ref numbering_page "Numbering" - allows to display the ID +numbers of all meshing elements or nodes composing your mesh in the +viewer.
    • +
    • \ref display_mode_page "Display Mode" - allows to select between +Wireframe, Shading and Nodes presentation.
    • +
    • \ref display_entity_page "Display Entity" - allows to display +Faces, Edges or both.
    • +
    • Colors / Size - allows to select color and size of +meshes.
    • +
    • \ref transparency_page "Transparency" - allows to change the +transparency of mesh elements.
    • +
    • \ref clipping_page "Clipping" - allows to create cross-sections of the selected objects.
    • +
    • \ref about_quality_controls_page "Controls" - graphically +presents various information about meshes.
    • +
    • Hide - allows to hide the selected mesh from the viewer.
    • +
    • Show Only -allows to display only the selected mesh, hiding all other from the viewer.
    • +
    • Dump view - exports an object from the viewer in bmp, png, jpg or jpeg image format.
    • +
    • Change background - allows to redefine the background color. By default it is black.
    • +
    + +*/ + diff --git a/doc/salome/gui/SMESH/input/volume.doc b/doc/salome/gui/SMESH/input/volume.doc new file mode 100644 index 000000000..391b09023 --- /dev/null +++ b/doc/salome/gui/SMESH/input/volume.doc @@ -0,0 +1,28 @@ +/*! + +\page volume_page Volume + +\n \b Volume mesh quality criterion reflects the volume of meshes of a +3D object. + +To apply the Volume quality criterion to your mesh: +
      +
    1. Display your mesh in the viewer.
    2. + +
    3. Choose Controls > Volume or click "Volume" button +in the toolbar. + +\image html image145.gif +
      "Volume" button
      + +Your mesh will be displayed in the viewer with its elements colored +according to the applied mesh quality control criterion: + +\image html image143.gif +
    4. +
    + +
    See Also 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 index 000000000..9b97aa6a2 --- /dev/null +++ b/doc/salome/gui/SMESH/input/warping.doc @@ -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: +
      +
    1. bisecting the four element edges,
    2. +
    3. 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.
    4. +
    +The plane normal is in the direction of the cross product of the +x-axis and the vector from the origin to the bisector of edge 3. Every +corner of the quad will then be a distance ?h? from the plane. The +length of each half edge is measured and the shortest length is +assigned ?l?. The warp angle is the arcsine of the ratio of the +projection height ?h? to the half edge length ?l?. + +To apply the Warping quality criterion to your mesh: +
      +
    1. Display your mesh in the viewer.
    2. + +
    3. Choose Controls > Warping Angle or click "Warping angle" +button of the toolbar. + +\image html image39.gif +
      "Warping angle" button
      + +Your mesh will be displayed in the viewer with its elements colored +according to the applied mesh quality control criterion: + +\image html image97.jpg +
    4. +
    + +
    See Also 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 index db7b0ae0f..000000000 --- a/doc/salome/gui/SMESH/length.htm +++ /dev/null @@ -1,118 +0,0 @@ - - - - - -Length - - - - - - - - - - - - - -

    Length

    - -

    The Length quality control criterion returns a value - of length of edge.

    - -

     

    - -

    - -

     

    - -

     

    - -

    See Also - a sample TUI Script of a  Length - quality control operation.  

    - -

    .

    - - - - diff --git a/doc/salome/gui/SMESH/merge_elements.htm b/doc/salome/gui/SMESH/merge_elements.htm deleted file mode 100755 index f210b6af8..000000000 --- a/doc/salome/gui/SMESH/merge_elements.htm +++ /dev/null @@ -1,101 +0,0 @@ - - - - - -Merge Elements - - - - - - - - - - -

    Merging Elements

    - -

    This functionality allows to merge coincident elements - of a mesh selectable in the dialog box.

    - -

    - -

    In this picture you see a triangle which coincides with one of the elements - of the mesh. After we apply Merge Elements - functionality, the triangle will be completely merged with the mesh.

    - -

    - -

      See - Also a sample TUI Script of a Merge - Elements operation.  

    - -

     

    - -

     

    - - - - diff --git a/doc/salome/gui/SMESH/mesh.htm b/doc/salome/gui/SMESH/mesh.htm deleted file mode 100755 index f849df81a..000000000 --- a/doc/salome/gui/SMESH/mesh.htm +++ /dev/null @@ -1,216 +0,0 @@ - - - - - -mesh - - - - - - - - - - - -

    Introduction to MESH

    - -

     

    - -

    MESH - module of SALOME is destined for:

    - - - -

    - -

    for edges:

    - -
      - - -
    - -

    for faces:

    - -
      - - -
    - -

    for solids:

    - -
      - - -
    - -

    .

    - - - - diff --git a/doc/salome/gui/SMESH/mesh_through_point.htm b/doc/salome/gui/SMESH/mesh_through_point.htm deleted file mode 100755 index bf8e6f4ab..000000000 --- a/doc/salome/gui/SMESH/mesh_through_point.htm +++ /dev/null @@ -1,132 +0,0 @@ - - - - - -Mesh through point - - - - - - - - - - - -

    Mesh through point

    - -

    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.

    - -

    To create a mesh passing through a point:

    - -

    1. From the Modification - menu choose the Mesh through point - item or click button in the toolbar. The following - dialog box shall appear:

    - -

    - -

    2. Enter the coordinates of the point

    - -

    3. Choose one of several methods: you can - either Create a new node at the - indicated point or Move the existing node to the point. In the latter - case you can check in Automatic search - of the closest node or select the necessary node manually. Preview - check-box allows to see the results of the operation.

    - -

    4. Click the Apply - or OK button.

    - -

     See - Also a sample TUI Script of a Mesh - through point operation.  

    - -

     

    - -

     

    - -

     

    - -

     

    - - - - diff --git a/doc/salome/gui/SMESH/modifying_meshes.htm b/doc/salome/gui/SMESH/modifying_meshes.htm deleted file mode 100755 index e33ea8c4b..000000000 --- a/doc/salome/gui/SMESH/modifying_meshes.htm +++ /dev/null @@ -1,1881 +0,0 @@ - - - - - -Modifying Meshes - - - - - - - - - - - -

    Modifying Meshes

    - -

    Adding Nodes and Elements

    - -

    Add Node

    - -

    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  

    - -

     

    - -

    Add Edge

    - -

    import SMESH_mechanic

    - -

     

    - -

    mesh = SMESH_mechanic.mesh

    - -

    print ""

    - -

     

    - -

    # add node

    - -

    n1 - = mesh.AddNode(50, 10, 0)

    - -

    if n1 == 0: print - "KO node addition."

    - -

     

    - -

    # add edge

    - -

    e1 - = mesh.AddEdge([n1, 38])

    - -

    if e1 == 0: print - "KO edge addition."

    - -

    else:       print - "New Edge has been added with ID ", e1

    - -

    Add Triangle

    - -

    import SMESH_mechanic

    - -

     

    - -

    mesh = SMESH_mechanic.mesh

    - -

    print ""

    - -

     

    - -

    # add node

    - -

    n1 = mesh.AddNode(50, - 10, 0)

    - -

    if n1 == 0: print - "KO node addition."

    - -

     

    - -

    # add triangle

    - -

    t1 = mesh.AddFace([n1, - 38, 39])

    - -

    if t1 == 0: print - "KO triangle addition."

    - -

    else:       print - "New Triangle has been added with ID ", t1

    - -

    Add Quadrangle

    - -

    import SMESH_mechanic

    - -

     

    - -

    mesh = SMESH_mechanic.mesh

    - -

    print ""

    - -

     

    - -

    # add node

    - -

    n1 = mesh.AddNode(50, - 10, 0)

    - -

    if n1 == 0: print - "KO node addition."

    - -

     

    - -

    n2 = mesh.AddNode(40, - 20, 0)

    - -

    if n2 == 0: print - "KO node addition."

    - -

     

    - -

    # add quadrangle

    - -

    q1 = mesh.AddFace([n2, - n1, 38, 39])

    - -

    if q1 == 0: print - "KO quadrangle addition."

    - -

    else: -       print - "New Quadrangle has been added with ID ", q1

    - -

    Add Tetrahedron

    - -

    import SMESH_mechanic

    - -

     

    - -

    mesh = SMESH_mechanic.mesh

    - -

    print ""

    - -

     

    - -

    # add node

    - -

    n1 = mesh.AddNode(50, - 10, 0)

    - -

    if n1 == 0: print - "KO node addition."

    - -

     

    - -

    # add tetrahedron

    - -

    t1 = mesh.AddVolume([n1, - 38, 39, 246])

    - -

    if t1 == 0: print - "KO tetrahedron addition."

    - -

    else: -       print - "New Tetrahedron has been added with ID ", t1

    - -

    Add Hexahedron

    - -

    import SMESH_mechanic

    - -

     

    - -

    mesh = SMESH_mechanic.mesh

    - -

    print ""

    - -

     

    - -

    # add nodes

    - -

    nId1 = mesh.AddNode(50, - 10, 0)

    - -

    nId2 = mesh.AddNode(47, - 12, 0)

    - -

    nId3 = mesh.AddNode(50, - 10, 10)

    - -

    nId4 = mesh.AddNode(47, - 12, 10)

    - -

     

    - -

    if nId1 == 0 or - nId2 == 0 or nId3 == 0 or nId4 == 0: print "KO node addition."

    - -

     

    - -

    # add hexahedron

    - -

    vId = mesh.AddVolume([nId2, - nId1, 38, 39, nId4, nId3, 245, 246])

    - -

    if vId == 0: print - "KO Hexahedron addition."

    - -

    else:        print - "New Hexahedron has been added with ID ", vId

    - -

     

    - -

    Add Polygon

    - -

    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) -

    - -

    Add Polyhedron

    - -

    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) -

    - -

     

    - -

    Removing Nodes and Elements

    - -

    Removing Nodes

    - -

     

    - -

    import - SMESH_mechanic

    - -

     

    - -

    mesh = SMESH_mechanic.mesh

    - -

     

    - -

    # remove nodes #246 - and #255

    - -

    res = mesh.RemoveNodes([246, - 255])

    - -

    if res == 1: print - "Nodes removing is OK!"

    - -

    else:        print - "KO nodes removing."

    - -

     

    - -

    Removing Elements

    - -

    import SMESH_mechanic

    - -

     

    - -

    mesh = SMESH_mechanic.mesh

    - -

     

    - -

    # remove three elements: - #850, #859 and #814

    - -

    res = mesh.RemoveElements([850, - 859, 814])

    - -

    if res == 1: print - "Elements removing is OK!"

    - -

    else:        print - "KO Elements removing."  

    - -

     

    - -

    Renumbering Nodes and Elements

    - -

    import SMESH_mechanic

    - -

     

    - -

    mesh = SMESH_mechanic.mesh

    - -

     

    - -

    mesh.RenumberNodes() -

    - -

    Moving Nodes

    - -

    import SMESH_mechanic

    - -

     

    - -

    mesh = SMESH_mechanic.mesh

    - -

     

    - -

    # move node #38

    - -

    mesh.MoveNode(38, - 20., 10., 0.)

    - -

     

    - -

     

    - -

    Mesh - through point

    - -

     

    - -

    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] )

    - -

    Diagonal Inversion

    - -

    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) -

    - -

    Uniting two Triangles

    - -

    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) -

    - -

    Uniting a Set of Triangles

    - -

    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) -  

    - -

    Orientation

    - -

    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) -

    - -

     

    - -

    Cutting Quadrangles

    - -

    import SMESH_mechanic

    - -

     

    - -

    smesh = SMESH_mechanic.smesh

    - -

    mesh  = - SMESH_mechanic.mesh

    - -

     

    - -

    # cut two quadrangles: - 405 and 406

    - -

    mesh.QuadToTri([405, - 406], smesh.FT_MinimumAngle)  

    - -

     

    - -

    Smoothing

    - -

    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) -

    - -

     

    - -

    Extrusion

    - -

    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) -

    - -

    Extrusion along a Path

    - -

    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) -

    - -

    Revolution

    - -

    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)

    - -

     

    - -

    Pattern Mapping

    - -

    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()  

    - - - - diff --git a/doc/salome/gui/SMESH/netgen_2d_and_3d_hypotheses.htm b/doc/salome/gui/SMESH/netgen_2d_and_3d_hypotheses.htm deleted file mode 100644 index 1413f3baf..000000000 --- a/doc/salome/gui/SMESH/netgen_2d_and_3d_hypotheses.htm +++ /dev/null @@ -1,146 +0,0 @@ - - - - - -Netgen 2D and 3D hypotheses - - - - - - - - - - - -

    Netgen 2D and 3D hypotheses

    - -

    Netgen 2D and Netgen - 3D hypotheses work only with Netgen 1D-2D and Netgen - 1D-2D-3D 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.

    - -

    - -
      - -
    • Name - - allows to define the name for the algorithm (Netgen 2D (or 3D) Parameters - by default)

    • - -
    • Max - Size - maximum linear dimensions for mesh cells.

    • - -
    • Second - Order - if this box is checked in, the algorithm will create second - order nodes on the mesh, which actually will become Quadratic. -   

    • - -
    • Fineness - - 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.

    • - -
    • Growth - rate - allows to define how much the linear dimensions of two adjacent - cells can differ (i.e. 0.3 means 30%).

    • - -
    • Nb. - Segs per Edge and Nb Segs per - Radius - allows to define the minimum number of mesh segments in - which edges and radiuses will be split.

    • - -
    • Allow - Quadrangles - 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.

    • - -
    • Optimize - - if this box is checked in, the algorithm will try to create regular - (possessing even sides) elements.

    • -
    - - - - diff --git a/doc/salome/gui/SMESH/note1.gif b/doc/salome/gui/SMESH/note1.gif deleted file mode 100755 index b53e21d0ac50a45e36c9a7a97049d81d7017abfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1505 zcmV<71s?iGNk%w1VI%-10QUd@|Nj86rmiI-C1PD@!M(>(PF8qwhOMZ*Gb&d!F+w34 zMlvl;my)repR6w_SAuuNURrk5)8RERSt%W*cyQB0K66=EY6k$<3INv%0LBRby9ofP z3R&fRZ{sRF00|4>|0ObS#-UI;I0szVa z0ImfA;spV;1_7-E0jLB5`UV2`1p>tcVuyTH*a=BYjzbyNG&};D6O%K)!<$Z4*;>Y zTzh{+tFUf0HYNA}321Bu_Wl+3{~2a#7O1T>={Q&v=0Q>y` z`Tqj^{{xDR0{#C4`~L*Hzyy?-1^WFA{Qe!-+A8_}I(d2?+}}OH!#qq)B4=nt;Nh~> z*02Bl0Q~#_`S}3<{{jF10{{F2|NjL4{005}1^@pB|NRF4{|fv13V3)1|Nae&iwXbz z6#Dun;^QT!s2sbxFaG{Y(b7YrqCmvMZSnAzI5;-{`vCv>1&W0O;M@tAl_~l4a?Z?% zk&6IqYgk)W3u0XwE-V#;e^R5HQZz0AeS2>vAOK!nSS20-QcXD#4FCrP01pTNVqRLp zzP(96KL7v!A^8LW00930EC2ui03-k=000R80RIUbNU)&6g9sBEB-4qWLjnpTB4nh` z-LPTv@-33cQQ(16>1@%$#cH0tjvN`e+op}0GHdAypp-Zu8!Z6LrU3vaYG%X%x&X`q zKrL6WP(Bq}&?Su)G;`&MAx()=djUgMvE5DuLs3kiw5ACGHl-P zp*1*Wm9V?tguUX2vH*!chzJc5Bw^1V2@4eDAV=;{0&<3O01~vIaF{TJ5I6|Kr;b24 zFQ~AfLL>taJ5!dh7?Nbj4;Mm|Ou4`!NDvk@T&Q5N#154hUj%j`fZqb$yqtp>& z;0A}VV)D?#1{6E|;DtbMT)=}7NMsQVFvXyA2?wtrV~7Rg9J2!mj&x&144_ScIODxvN!a+FWz;nzvk?^oZGOwhdMhL2)LV*Y~EC@swpSi$; z3`ew)3??I}Lq-a6JhDzQ1b~3V1QD201Bl;^GPNUU}44)K`{Bx7f)Q#L=jAE(8LQ)Jds8VEojg}6I3w4 z#2rg~8p8`kII%$sPBigEaQ{HQ(8nCK(xF2IbI?Httz0CcNhtm#z{RY)#xX}6epH|X zt$jd%5dM!N9MREZb{ z7(j+4@d{)?MZR2fj{uIuOU6Fov{Fke;M7w>yaTM#iY?WYV~aPbJOVFJvtXl)GDaC= zak@)s!;3TK>;g_I5x^_PJlxQt3;?veqe;Av2vAQt;K1UJK4awTNF?M?5{e{b - - - - -Pattern mapping - - - - - - - - - - - - - -

    Pattern mapping

    - -

    About patterns

    - -

    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:

    - -

     

    - -

    1. The first line holds the number of nodes - (N).

    - -

     

    - -

    2. The next N lines describe nodes coordinates. - Each line holds 2 coordinates of a node.

    - -

     

    - -

    3. 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.

    - -

     

    - -

    4. 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.

    - -

     

    - -

    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:

    - -

     

    - -

    - -

     

    - -

     

    - -

    Application of pattern mapping

    - -

    To apply pattern mapping to a geometrical object:

    - -

     

    - -

    1. From the Modification - menu choose the Pattern Mapping - item or click button in the toolbar. The following - dialog box shall appear:

    - -

     

    - - --- - - - -
    -

    -

    - -

     

    - -

    To apply a pattern to a geometrical object, you should specify:

    - -

    - a face having the number of vertices equal - to the number of key-points in the pattern; the number of key-points on - internal boundaries of a pattern must also be equal to the number of vertices - on internal boundaries of a face;

    - -

    - a vertex to which the first key-point should - be mapped,

    - -

    - reverse or not the order of key-points. - (The order of vertices of a face is counterclockwise looking from outside).

    - -

     

    - -

    Then you either load a .smp pattern file previously created manually - by clicking on the button, or click on the New - button for automatic generation.

    - -

    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 projecting nodes on the face 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:

    - -

     

    - -

    1. 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.

    - -

    2. 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.

    - - --- - - - -
    -

    -

    - -

     

    - -

    Mapping algorithm:

    - -

    The mapping algorithm is as follows:

    - -

     

    - -

    1. 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.

    - -

    2. 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.

    - -

     

    - -

    - -

     

    - -

    3. 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.

    - -

     

    - -

    - -

     

    - -

    4. 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.

    - -

     

    - -

    - -

     

    - -

     See - Also a sample TUI Script of a Pattern - Mapping operation.  

    - -

     

    - - - - diff --git a/doc/salome/gui/SMESH/pics/dialog.png b/doc/salome/gui/SMESH/pics/dialog.png new file mode 100755 index 0000000000000000000000000000000000000000..38ece87dc7fbcac8e127f8aec713e603d590661f GIT binary patch literal 11155 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 B5jX$< literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/pics/mergeelems.png b/doc/salome/gui/SMESH/pics/mergeelems.png index 9314da8c345beb0b6e7989033a01f8228152ad74..dbd87877e0b73dd08f13fa9d530379dc7e42e508 100755 GIT binary patch literal 19490 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 literal 8680 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 - - - - -Presentation - - - - - - - - - - - - -

    Display Mode

    - -

    By default your objects are represented as set in Preferences.

    - -

    However, right-clicking on the mesh in the Object - Browser, and selecting Display - Mode, you can display your mesh as: -

    - -

     

    - -

    Wireframe -

    - -

    - -

     

    - -

    Shading

    - -

    - -

     

    - -

    or - Nodes.

    - -

    - -

     

    - -

    Wireframe can - combine with Nodes and - Shading.

    - -

     

    - -

    Shading - and Wireframe modes can combine - with Shrink, however - Nodes can't.

    - -

    - -

     

    - - - - diff --git a/doc/salome/gui/SMESH/prism_3d_algorithm.htm b/doc/salome/gui/SMESH/prism_3d_algorithm.htm deleted file mode 100644 index 9bdf4a4ef..000000000 --- a/doc/salome/gui/SMESH/prism_3d_algorithm.htm +++ /dev/null @@ -1,114 +0,0 @@ - - - - - -3D extrusion meshing algorithm - - - - - - - - - - - -

    3D extrusion meshing algorithm

    - -

    3D extrusion algorithm can be used for meshing prisms, i.e. -3D Shapes defined by - two opposing faces having the same number of vertices and edges and meshed using the - 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.

    - -

    - -

     

    - -

    As you can see, the 3D extrusion - algorithm permits to build and to have in the same 3D mesh such elements - as hexahedrons, prisms and polyhedrons.

    - - - - diff --git a/doc/salome/gui/SMESH/projection_algorithms.htm b/doc/salome/gui/SMESH/projection_algorithms.htm deleted file mode 100644 index 3e1059b6b..000000000 --- a/doc/salome/gui/SMESH/projection_algorithms.htm +++ /dev/null @@ -1,179 +0,0 @@ - - - - - -Projection Algorithms - - - - - - - - - - - -

    Projection Algorithms

    - -

    Projection algorithms allow - to define the mesh of a geometrical object by the projection of another - already meshed geometrical object.

    - -

     

    - -

    Projection - 1D algorithm permits to define the mesh of an edge by the projection - of another already meshed edge.

    - -

    To apply this algorithm - select the edge to be meshed (indicated in the field Geometry - of Create mesh dialog box), Projection 1D in the list of 1D algorithms - and click the button. The following dialog box will appear: -

    - -

    - -

    In this menu you can define the Name - of the algorithm, the algeady meshed source Edge - and the 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 Source Vertex being the first - point of the Source Edge and the Target - Vertex being the first point of the created Edge.

    - -

    Projection 2D algorithm permits to define the mesh of a face - by the projection of another already meshed face. 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 Geometry of - Create mesh dialog box), Projection - 2D in the list of 2D algorithms and click the button. - The following dialog box will appear:

    - -

    - -

    In this menu you can define the Name - of the algorithm, the algeady meshed source Face - and the 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 Source Vertices, which - belong to the same edge of the source - face, and two Target Vertices, - which belong to the same edge of the created - Face.

    - -

    Projection 3D 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 Geometry of - Create mesh dialog box), Projection - 3D in the list of 3D algorithms and click the button. - The following dialog box will appear:

    - -

    - -

    In this menu you can define the Name - of the algorithm, the algeady meshed source 3D - shape and the 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 Source Vertices, - which belong to the same edge of the - source 3D Shape, and two Target Vertices, which belong to the - same edge of the source 3D Shape.

    - - - - diff --git a/doc/salome/gui/SMESH/quality_controls.htm b/doc/salome/gui/SMESH/quality_controls.htm deleted file mode 100755 index 064d7b9eb..000000000 --- a/doc/salome/gui/SMESH/quality_controls.htm +++ /dev/null @@ -1,1270 +0,0 @@ - - - - - -Quality Controls - - - - - - - - - - - -

    Quality Controls

    - -

    Free Borders

    - -

    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) -

    - -

    Borders at Multiconnection

    - -

    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) -

    - -

    Length 1D

    - -

    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) -

    - -

    Free Edges

    - -

    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) -

    - -

     

    - -

    Length 2D

    - -

    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) -

    - -

     

    - -

    Borders at Multiconnection 2D

    - -

    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) -

    - -

     

    - -

    Area

    - -

    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) -  

    - -

    Taper

    - -

    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) -  

    - -

    Aspect Ratio

    - -

    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) -

    - -

     

    - -

    Minimum Angle

    - -

    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) -

    - -

     

    - -

    Warping

    - -

    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) -

    - -

     

    - -

    Skew

    - -

    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) -

    - -

     

    - -

    Aspect Ratio 3D

    - -

    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) -

    - -

    Volume

    - -

    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) -  

    - - - - diff --git a/doc/salome/gui/SMESH/radial_prism.htm b/doc/salome/gui/SMESH/radial_prism.htm deleted file mode 100644 index 3ca448560..000000000 --- a/doc/salome/gui/SMESH/radial_prism.htm +++ /dev/null @@ -1,124 +0,0 @@ - - - - - -Radial Prism - - - - - - - - - - - -

    Radial Prism

    - -

    This algorithm applies to the meshing of a hollow 3D shape, i.e. such - shape should be composed of two meshed shells: an outer shell and an internal - shell without intersection with the outer shell. One of the shells should - be a 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.

    - -

     

    - -

    Distribution of layers can be set with any - of 1D Hypotheses.

    - -

    - -

     

    - -

     

    - -

     

    - -

     

    - -

     

    - - - - diff --git a/doc/salome/gui/SMESH/revolution.htm b/doc/salome/gui/SMESH/revolution.htm deleted file mode 100755 index b5d7a667d..000000000 --- a/doc/salome/gui/SMESH/revolution.htm +++ /dev/null @@ -1,156 +0,0 @@ - - - - - -Revolution - - - - - - - - - - - - -

    Revolution

    - -

    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).

    - -

     

    - -

    To apply revolution:

    - -

     

    - -

    1. From the Modification - menu choose the Revolution item - or click button in the toolbar. The following dialog box - shall appear:

    - -

     

    - -

    - -

     

    - -

    - -

     

    - -

    2. In this dialog box you should specify:

    - -
      - -
    • the type of elements - which will be extruded (1D or 2D),

    • - -
    • specify the IDs of - the elements which will be revolved by selecting them in the 3D viewer - or select the whole mesh or submesh,

    • - -
    • specify the axis (point - and vector) around which the elements will be revolved,

    • - -
    • angle of rotation,

    • - -
    • number of steps,

    • - -
    • tolerance of rotation

    • -
    - -

     

    - -

    3. Click the Apply - or OK button.

    - -

     

    - -

    - -

     

    - -

     See - Also a sample TUI Script of a  Revolution - operation.  

    - -

     

    - - - - diff --git a/doc/salome/gui/SMESH/segments_around_vertex_algorithm.htm b/doc/salome/gui/SMESH/segments_around_vertex_algorithm.htm deleted file mode 100755 index 7e73af218..000000000 --- a/doc/salome/gui/SMESH/segments_around_vertex_algorithm.htm +++ /dev/null @@ -1,98 +0,0 @@ - - - - - -Segments around Vertex Algorithm - - - - - - - - - - -

    Segments around Vertex

    - -

    Segments around Vertex 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.

    - -

    - -

     

    - -

     

    - - - - diff --git a/doc/salome/gui/SMESH/selection_filter_library.htm b/doc/salome/gui/SMESH/selection_filter_library.htm deleted file mode 100755 index 2a2cb8d78..000000000 --- a/doc/salome/gui/SMESH/selection_filter_library.htm +++ /dev/null @@ -1,159 +0,0 @@ - - - - - -Selection filter library - - - - - - - - - - - - -

    Selection filter library

    - -

    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 Tools / Selection filter library.

    - -

     

    - -

    - -

     

    - -

    Library file name shows - the path and the file name where your filters will be stored. By clicking - the browse button - you can load an existing filter library.

    - -

    Names of filters lists the filters - created or uploaded for the current study. You can Add - or Delete filters.  

    - -

    In Filter name box you can specify - the name for your filter. By default it is prefixed with the corresponding - entity type.

    - -

    Each filter can be applicable to Nodes, - Edges, Faces or Volumes. - You can combine many criteria in one filter, but they all must be of the - same Entity type.

    - -

    The Add button creates a new - criterion at the end of the list of criteria. The Insert - button creates a new criterion before the selected criterion. The Remove button deletes the selected criterion. - The Clear button deletes all criteria. -  

    - -

    Each Entity type has its specific - list of criteria, however all filters have common syntax. For each criterion - you should specify the Threshold Value - and whether we search for the elements that should be More, - Less or Equal to this Value. - You should also specify if the criterion is Unary - or Binary.   

    - -

    Some criteria should have the additional parameter of Tolerance.

    - -

     

    - -

    When we create a Standalone Group - using filters (for this click Set Filters - button in the Create Group menu), - the menu for setting filters looks a bit differently. Toggling Insert - filter in viewer checkbox enables to preview the group selected - with your current filter in the viewer.

    - -

    In the Source field you choose - if the filter will be applied to the whole Mesh, - the Initial Selection or the Current Group.

    - -

    Copy from... button gives you - a possibility to load an existing filter from Selection - filter library and Add to... - button gives you a possibility to save your current filter in the Library. -  

    - -

     

    - -

    - - - - diff --git a/doc/salome/gui/SMESH/smesh.log b/doc/salome/gui/SMESH/smesh.log deleted file mode 100755 index 4222c00a5..000000000 --- a/doc/salome/gui/SMESH/smesh.log +++ /dev/null @@ -1,553 +0,0 @@ -|SourceProjectName:SMESH.hpr -|DestinationProjectName:index.htm -whhost.js -whmsg.js -whmozemu.js -whproxy.js -whstub.js -whutils.js -whver.js -whform.js -whphost.js -whstart.js -whtopic.js -whframes.js -whlang.js -whskin_info.htm -whskin_blank.htm -whskin_pickup.htm -whskin_homepage.htm -whskin_tw.htm -whnjs.htm -whthost.js -whtdhtml.htm -whihost.js -whibody.htm -whiform.htm -whfhost.js -whfbody.htm -whfform.htm -whghost.js -whgbody.htm -whgdhtml.htm -whgdef.htm -whproj.js -whproj.xml -whproj.htm -whxdata\whtoc.xml -whxdata\whidx.xml -whxdata\whfts.xml -whxdata\whglo.xml -whdata\whtoc.js -whdata\whtoc.htm -whdata\whtdata.js -whdata\whidx.js -whdata\whidx.htm -whdata\whidata.js -whdata\whfts.js -whdata\whfts.htm -whdata\whglo.js -whdata\whglo.htm -whdata\whgdata.js -whdata\whftdata.js -whdata\whfwdata.js -whres.xml -webhelp.jar -webhelp.cab -whgdata\whnvp30.htm -whgdata\whnvp31.htm -whgdata\whnvp32.htm -whgdata\whnvp33.htm -whgdata\whnvt30.htm -whgdata\whnvt31.htm -whgdata\whnvt32.htm -whgdata\whnvt33.htm -whgdata\whnvf30.htm -whgdata\whnvf31.htm -whgdata\whnvf32.htm -whgdata\whnvf33.htm -whgdata\whnvl31.htm -whgdata\whnvl32.htm -whgdata\whnvl33.htm -whgdata\whexpbar.gif -cshdat_webhelp.htm -whcsh_home.htm -whcshdata.htm -cshdat_robohelp.htm -whd_topic.xml -whd_nvp10.htm -whd_nvp20.htm -whd_tabs.htm -whd_dpns.htm -whd_tab0.gif -whd_tab1.gif -whd_tab2.gif -whd_tab3.gif -whd_tab4.gif -whd_tab5.gif -whd_tab6.gif -whd_tab7.gif -whd_tab8.gif -whd_toc1.gif -whd_toc2.gif -whd_toc3.gif -whd_toc4.gif -whd_show0.gif -whd_show1.gif -whd_show2.gif -whd_hide0.gif -whd_hide1.gif -whd_hide2.gif -whd_sync0.gif -whd_sync1.gif -whd_sync2.gif -whd_prev0.gif -whd_prev1.gif -whd_prev2.gif -whd_next0.gif -whd_next1.gif -whd_next2.gif -whd_wbsh0.gif -whd_wbsh1.gif -whd_wbsh2.gif -whidhtml.htm -whfdhtml.htm -index_hha.hhk -index.hhc -index.hhk -about_viewing_meshes.htm -adding_quadratic_nodes_and_elements.htm -aspect_ratio_3d.htm -borders_at_multi-connection.htm -borders_at_multiconnection_2d.htm -building_compounds.htm -clipping.htm -constructing_meshes.htm -convert_to_from_quadratic_mesh.htm -defining_hypotheses_tui.htm -deleting_groups.htm -display_entity.htm -extrusion.htm -extrusion_along_a_path.htm -files\about_hypotheses.htm -files\about_meshes.htm -files\about_meshing_algorithms.htm -files\about_quality_controls.htm -files\adding_nodes_and_elements.htm -files\area_of_elements.htm -files\arithmetic_1d.htm -files\aspect_ratio.htm -files\changing_orientation_of_elements.htm -files\constructing_groups_of_specific_elements.htm -files\constructing_meshes.htm -files\constructing_submeshes.htm -files\creating_groups.htm -files\cutting_quadrangles.htm -files\diagonal_iversion_of_elements.htm -files\displacing_nodes.htm -files\displaying_nodes_numbers.htm -files\editing_groups.htm -files\importing_and_exporting_meshes.htm -files\length_of_edges.htm -files\max._element_area_hypothesis.htm -files\max._element_volume_hypothsis.htm -files\merging_nodes.htm -files\minimum_angle.htm -files\non_conform_mesh_allowed_hypothesis.htm -files\reassigning_hypotheses_and_algorithms.htm -files\removing_nodes_and_elements.htm -files\renumbering_nodes_and_elements.htm -files\rotation.htm -files\running_smesh_module.htm -files\sewing_meshes.htm -files\skew.htm -files\smoothing.htm -files\symmetry.htm -files\taper.htm -files\translation.htm -files\uniting_a_set_of_triangles.htm -files\uniting_two_triangles.htm -files\using_operations_on_groups.htm -files\viewing_mesh_info.htm -files\vtk_3d_viewer.htm -files\warp.htm -free_borders.htm -free_edges.htm -grouping_elements.htm -length.htm -merge_elements.htm -mesh.htm -mesh_through_point.htm -modifying_meshes.htm -namespacesmesh.html -netgen_2d_and_3d_hypotheses.htm -pattern_mapping.htm -presentation.htm -prism_3d_algorithm.htm -projection_algorithms.htm -quality_controls.htm -radial_prism.htm -revolution.htm -segments_around_vertex_algorithm.htm -selection_filter_library.htm -smesh.py_introduction.htm -transforming_meshes.htm -transparency.htm -viewing_meshes.htm -volume.htm -ehelp.xml -texture_horiz_ltbluebubbles.jpg -index.glo -default.css -pics\curvi_simple_after.png -pics\image89.gif -pics\image100.gif -pics\image78.gif -pics\image23.gif -pics\b-mesh_infos.png -pics\remove_nodes2.png -pics\moving_nodes1.png -pics\smoothing2.png -pics\a-maxelarea.png -pics\patternmapping1.png -image94.jpg -image106.gif -image91.gif -image80.gif -pics\distributionwithtabledensity.png -pics\moving_nodes2.png -image7.jpg -pics\patternmapping2.png -pics\extrusionalongaline1.png -pics\addquadrangle.png -image95.jpg -pics\sewing1.png -image92.gif -image51.jpg -image70.gif -pics\meshtopass.png -pics\image157.gif -pics\extrusion1.png -pics\curvi_angles_after.png -pics\straight_before.png -pics\image102.gif -pics\length2d.png -pics\free_borders1.png -pics\a-creategroup.png -pics\a-startendlength.png -pics\a-patterntype.png -pics\extrusionalongaline2.png -pics\orientaation1.png -pics\unionoftwotriangles.png -image96.jpg -pics\sewing2.png -image119.gif -image108.gif -image52.jpg -image82.gif -image71.gif -image30.jpg -pics\lengthnearvertex.png -pics\straight_after.png -pics\cut_groups1.png -pics\uniting_a_set_of_triangles1.png -pics\b-erage_length.png -pics\removeelements.png -image97.jpg -pics\sewing3.png -image86.jpg -image50.gif -image94.gif -image83.gif -image31.jpg -pics\aqt.png -pics\distributionwithanalyticdensity.png -pics\meshexportmesh.png -pics\image27.gif -pics\cut_groups2.png -pics\edit_mesh_change_value_hyp.png -pics\add_node.png -pics\uniting_a_set_of_triangles2.png -pics\max_el_area.png -image10.jpg -pics\a-filteronedges.png -pics\revolution1.png -pics\addhexahedron.png -pics\addtriangle.png -pics\editgroup.png -pics\sewing4.png -image95.gif -image76.jpg -image84.gif -image32.jpg -image40.gif -i_blue.jpg -image160.gif -pics\number_of_layers.png -pics\netgen2d.png -pics\mesh_for_extr_along_path.png -pics\meshtrianglemergeelem1.png -pics\image138.gif -pics\cut_groups3.png -pics\revolution2.png -pics\renumberelements.png -pics\intersectgroups.png -image88.jpg -image30.gif -image96.gif -image77.jpg -image74.gif -image63.gif -image22.jpg -image41.gif -image161.gif -pics\createmesh-inv.png -pics\image139.gif -pics\b-art_end_length.png -pics\b-mberofsegments.png -pics\b-flection1d.png -pics\a-unionoftriangles.png -image56.jpg -image53.gif -image20.gif -image97.gif -image78.jpg -image64.gif -image23.jpg -pics\buildcompound.png -pics\projection_3d.png -image151.gif -pics\selectionfilterlibrary.png -pics\intersect_groups1.png -pics\create_group.png -pics\add_triangle.png -pics\add_edge.png -pics\rotation1.png -pics\merging_nodes1.png -pics\translation1.png -pics\cutgroups.png -image79.jpg -image98.gif -image32.gif -pics\projection_2d.png -pics\advanced_mesh_infos.png -pics\image108.gif -pics\image91.gif -image152.gif -pics\automaticlength.png -pics\intersect_groups2.png -image130.gif -pics\rotation2.png -pics\merging_nodes2.png -pics\a-cuttingofquadrangles.png -pics\a-transparency.png -pics\a-viewgeneral.png -pics\smoothing.png -pics\translation2.png -image99.gif -image55.gif -image88.gif -image36.jpg -image33.gif -image25.jpg -pics\projection_1d.png -pics\view_rotation_point.png -image153.gif -pics\image109.gif -image15.jpg -image142.gif -pics\intersect_groups3.png -image131.gif -pics\edit_mesh1.png -pics\b-ithmetic1d.png -pics\mergenodes.png -pics\rotation.png -pics\addnode.png -image120.gif -image56.gif -image37.jpg -image67.gif -image34.gif -pics\convert.png -image154.gif -pics\edge_wire_3d_after.png -pics\graduatedaxes1.png -pics\length-crit.png -image143.gif -pics\editing_groups1.png -image132.gif -pics\a-maxelvolume.png -pics\a-averagelength.png -pics\movenodes.png -pics\removenodes.png -pics\addtetrahedron.png -pics\uniongroups.png -image121.gif -image79.gif -image38.jpg -image46.gif -image35.gif -image27.jpg -image24.gif -note1.gif -pics\distribution_of_layers.png -image155.gif -pics\edge_wire_after.png -pics\edge_wire_before.png -image144.gif -pics\deletegroups.png -pics\editing_groups2.png -image133.gif -pics\add_polyhedron.png -pics\addedge.png -pics\creategroup.png -image122.gif -image58.gif -image36.gif -image25.gif -image156.gif -pics\circle_simple_after.png -image145.gif -image134.gif -pics\edit_mesh_remove_hyp.png -pics\a-patterntype1.png -image123.gif -image101.gif -image37.gif -image157.gif -pics\image96.gif -image146.gif -pics\meshimportmesh.png -image135.gif -pics\uniting_two_triangles1.png -pics\a-nbsegments1.png -pics\a-arithmetic1d.png -pics\symmetry1.png -image90.jpg -image124.gif -image49.gif -pics\exemple.gif -image38.gif -pics\set_rotation_point_dialog1.png -pics\image97.gif -image147.gif -pics\union_groups1.png -image136.gif -pics\free_edges.png -pics\uniting_two_triangles2.png -pics\a-nbsegments2.png -pics\symmetry2.png -image125.gif -image103.gif -image39.gif -image28.gif -image159.gif -pics\set_rotation_point_dialog2.png -pics\circle_angles_after.png -pics\createmesh-inv2.png -pics\image98.gif -pics\mergeelems.png -image148.gif -pics\image21.gif -pics\union_groups2.png -image137.gif -pics\add_quadrangle.png -pics\remove_elements1.png -pics\a-createpolyhedralvolume.png -pics\a-clipping2.png -pics\a-deflection1d.png -pics\diagonalinversion.png -pics\symmetry3.png -pics\renumbernodes.png -image92.jpg -image126.gif -image18.gif -image70.jpg -pics\circle_simple_before.png -pics\edge_wire_3d_before.png -pics\curvi_simple_before.png -pics\createmesh-inv3.png -pics\image99.gif -pics\image77.gif -pics\union_groups3.png -pics\add_polygone.png -pics\remove_elements2.png -pics\remove_nodes1.png -pics\smoothing1.png -pics\a-standmeshinfo.png -pics\addpolygon.png -image5.jpg -image127.gif -image93.jpg -image105.gif -image19.gif -image71.jpg -index.ppf -ehlpdhtm.js -default_ns.css -whxdata\whtdata0.xml -whxdata\whftdata0.xml -whxdata\whfwdata0.xml -whxdata\whgdata0.xml -whdata\whtdata0.htm -whdata\whftdata0.htm -whdata\whfwdata0.htm -whdata\whgdata0.htm -whgdata\whlstt0.htm -whgdata\whlstt1.htm -whgdata\whlstt2.htm -whgdata\whlstt3.htm -whgdata\whlstt4.htm -whgdata\whlstt5.htm -whgdata\whlstt6.htm -whgdata\whlstt7.htm -whgdata\whlstt8.htm -whgdata\whlstt9.htm -whgdata\whlstt10.htm -whgdata\whlsti0.htm -whgdata\whlstfl0.htm -whgdata\whlstfl1.htm -whgdata\whlstfl2.htm -whgdata\whlstfl3.htm -whgdata\whlstfl4.htm -whgdata\whlstfl5.htm -whgdata\whlstfl6.htm -whgdata\whlstfl7.htm -whgdata\whlstfl8.htm -whgdata\whlstfl9.htm -whgdata\whlstfl10.htm -whgdata\whlstfl11.htm -whgdata\whlstfl12.htm -whgdata\whlstfl13.htm -whgdata\whlstfl14.htm -whgdata\whlstfl15.htm -whgdata\whlstfl16.htm -whgdata\whlstfl17.htm -whgdata\whlstfl18.htm -whgdata\whlstfl19.htm -whgdata\whlstfl20.htm -whgdata\whlstfl21.htm -whgdata\whlstfl22.htm -whgdata\whlstfl23.htm -whgdata\whlstfl24.htm -whgdata\whlstfl25.htm -whgdata\whlstfl26.htm -whgdata\whlstf0.htm -whgdata\whlstf1.htm -whgdata\whlstf2.htm -whgdata\whlstf3.htm -whgdata\whlstf4.htm -whgdata\whlstf5.htm -whgdata\whlstf6.htm -whgdata\whlstf7.htm -whgdata\whlstf8.htm -whgdata\whlstf9.htm -whgdata\whlstf10.htm -whgdata\whlstf11.htm -whgdata\whlstf12.htm -whgdata\whlstf13.htm -whgdata\whlstf14.htm -whgdata\whlstg0.htm -index.htm -index_csh.htm -index_rhc.htm diff --git a/doc/salome/gui/SMESH/smesh.py_introduction.htm b/doc/salome/gui/SMESH/smesh.py_introduction.htm deleted file mode 100644 index fc3d04835..000000000 --- a/doc/salome/gui/SMESH/smesh.py_introduction.htm +++ /dev/null @@ -1,270 +0,0 @@ - - - - - -smesh.py_introduction - - - - - - - - - - - -

    Introduction to MESH module python interface

    - -

    Package smesh provides - a standard API for creation and edition of meshes .

    - -

    Below you can see an example - of usage of the package smesh for 3d mesh generation.

    - -

      

    - -

    Example of 3d mesh generation - with NETGEN

    - -

    from geompy import *

    - -

    import - smesh

    - -

    # Geometry

    - -

    # an assembly of a box, - a cylinder and a truncated cone meshed with tetrahedral.

    - -

     

    - -

    # Define values

    - -

    name = "ex21_lamp" -

    - -

    cote = 60

    - -

    section = 20

    - -

    size = 200

    - -

    radius_1 = 80

    - -

    radius_2 = 40

    - -

    height - = 100

    - -

     

    - -

    # Build a box

    - -

    box = MakeBox(-cote, - -cote, -cote, +cote, +cote, +cote)

    - -

     

    - -

    # Build a cylinder

    - -

    pt1 = MakeVertex(0, - 0, cote/3)

    - -

    di1 = MakeVectorDXDYDZ(0, - 0, 1)

    - -

    cyl - = MakeCylinder(pt1, di1, section, size)

    - -

     

    - -

    # Build a truncated cone -

    - -

    pt2 = MakeVertex(0, - 0, size)

    - -

    cone - = MakeCone(pt2, di1, radius_1, radius_2, height)

    - -

     

    - -

    # Fuse

    - -

    box_cyl = MakeFuse(box, - cyl)

    - -

    piece - = MakeFuse(box_cyl, cone)

    - -

     

    - -

    # Add in study

    - -

    addToStudy(piece, - name)

    - -

     

    - -

    # Create a group of faces -

    - -

    group = CreateGroup(piece, - ShapeType["FACE"])

    - -

    group_name = name - + "_grp"

    - -

    addToStudy(group, - group_name)

    - -

    group.SetName(group_name) -

    - -

     

    - -

    # Add faces in the group -

    - -

    faces = SubShapeAllIDs(piece, - ShapeType["FACE"])

    - -

    UnionIDs(group, - faces)

    - -

     

    - -

    # Create a mesh

    - -

     

    - -

    # Define a mesh on a geometry -

    - -

    tetra = smesh.Mesh(piece, - name)

    - -

     

    - -

    # Define 1D hypothesis -

    - -

    algo1d = tetra.Segment() -

    - -

    algo1d.LocalLength(10) -

    - -

     

    - -

    # Define 2D hypothesis -

    - -

    algo2d = tetra.Triangle() -

    - -

    algo2d.LengthFromEdges() -

    - -

     

    - -

    # Define 3D hypothesis -

    - -

    algo3d = tetra.Tetrahedron(smesh.NETGEN) -

    - -

    algo3d.MaxElementVolume(100) -

    - -

     

    - -

    # Compute the mesh

    - -

    tetra.Compute() -

    - -

     

    - -

    # Create a groupe of faces -

    - -

    tetra.Group(group) -

    - - - - diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh.html new file mode 100644 index 000000000..a9096b2e6 --- /dev/null +++ b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh.html @@ -0,0 +1,6622 @@ + + + + + + Main Page + + + + +  + + + + +

    smeshDC.Mesh Class Reference

    Class to define a mesh. +More... +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Public Member Functions

    def __init__
     Constructor.
    def SetMesh
     Method that inits the Mesh object from SMESH_Mesh interface.
    def GetMesh
     Method that returns the mesh.
    def GetName
     Get mesh name.
    def SetName
     Set name to mesh.
    def GetSubMesh
     Get the subMesh object associated to a subShape.
    def GetShape
     Method that returns the shape associated to the mesh.
    def SetShape
     Method that associates given shape to the mesh(entails the mesh recreation).
    def IsReadyToCompute
     Return true if hypotheses are defined well.
    def GetAlgoState
     Return errors of hypotheses definintion error list is empty if everything is OK.
    def GetGeometryByMeshElement
     Return geometrical object the given element is built on.
    def MeshDimension
     Returns mesh dimension depending on shape one.
    def Segment
     Creates a segment discretization 1D algorithm.
    def Triangle
     Creates a triangle 2D algorithm for faces.
    def Quadrangle
     Creates a quadrangle 2D algorithm for faces.
    def Tetrahedron
     Creates a tetrahedron 3D algorithm for solids.
    def Hexahedron
     Creates a hexahedron 3D algorithm for solids.
    def Netgen
     Deprecated, only for compatibility!
    def Projection1D
     Creates a projection 1D algorithm for edges.
    def Projection2D
     Creates a projection 2D algorithm for faces.
    def Projection3D
     Creates a projection 3D algorithm for solids.
    def Prism
     Creates a 3D extrusion (Prism 3D) or RadialPrism 3D algorithm for solids.
    def Compute
     Compute the mesh and return the status of the computation.
    def AutomaticTetrahedralization
     Compute tetrahedral mesh using AutomaticLength + MEFISTO + NETGEN The parameter fineness [0,-1] defines mesh fineness.
    def AutomaticHexahedralization
     Compute hexahedral mesh using AutomaticLength + Quadrangle + Hexahedron The parameter fineness [0,-1] defines mesh fineness.
    def AddHypothesis
     Assign hypothesis.
    def GetHypothesisList
     Get the list of hypothesis added on a geom.
    def RemoveGlobalHypotheses
     Removes all global hypotheses.
    def Group
     Create a mesh group based on geometric object grp and give a name,
    + if this parameter is not defined the name is the same as the geometric group name
    + Note: Works like GroupOnGeom().
    def ExportToMED
     Deprecated, only for compatibility! Please, use ExportMED() method instead.
    def ExportMED
     Export the mesh in a file with the MED format.
    def ExportDAT
     Export the mesh in a file with the DAT format.
    def ExportUNV
     Export the mesh in a file with the UNV format.
    def ExportSTL
     Export the mesh in a file with the STL format.
    def CreateEmptyGroup
     Creates an empty mesh group.
    def GroupOnGeom
     Creates a mesh group based on geometric object grp and give a name,
    + if this parameter is not defined the name is the same as the geometric group name.
    def MakeGroupByIds
     Create a mesh group by the given ids of elements.
    def MakeGroup
     Create a mesh group by the given conditions.
    def MakeGroupByCriterion
     Create a mesh group by the given criterion.
    def MakeGroupByCriteria
     Create a mesh group by the given criteria(list of criterions).
    def MakeGroupByFilter
     Create a mesh group by the given filter.
    def GetIdsFromFilter
     Pass mesh elements through the given filter and return ids.
    def GetFreeBorders
     Verify whether 2D mesh element has free edges(edges connected to one face only)
    + Returns list of special structures(borders).
    def RemoveGroup
     Remove a group.
    def RemoveGroupWithContents
     Remove group with its contents.
    def GetGroups
     Get the list of groups existing in the mesh.
    def GetGroupNames
     Get the list of names of groups existing in the mesh.
    def UnionGroups
     Union of two groups New group is created.
    def IntersectGroups
     Intersection of two groups New group is created.
    def CutGroups
     Cut of two groups New group is created.
    def GetLog
     Get the log of nodes and elements added or removed since previous clear of the log.
    def ClearLog
     Clear the log of nodes and elements added or removed since previous clear.
    def GetId
     Get the internal Id.
    def GetStudyId
     Get the study Id.
    def HasDuplicatedGroupNamesMED
     Check group names for duplications.
    def GetMeshEditor
     Obtain instance of SMESH_MeshEditor.
    def GetMEDMesh
     Get MED Mesh.
    def NbNodes
     Returns number of nodes in mesh.
    def NbElements
     Returns number of elements in mesh.
    def NbEdges
     Returns number of edges in mesh.
    def NbEdgesOfOrder
     Returns number of edges with given order in mesh.
    def NbFaces
     Returns number of faces in mesh.
    def NbFacesOfOrder
     Returns number of faces with given order in mesh.
    def NbTriangles
     Returns number of triangles in mesh.
    def NbTrianglesOfOrder
     Returns number of triangles with given order in mesh.
    def NbQuadrangles
     Returns number of quadrangles in mesh.
    def NbQuadranglesOfOrder
     Returns number of quadrangles with given order in mesh.
    def NbPolygons
     Returns number of polygons in mesh.
    def NbVolumes
     Returns number of volumes in mesh.
    def NbVolumesOfOrder
     Returns number of volumes with given order in mesh.
    def NbTetras
     Returns number of tetrahedrons in mesh.
    def NbTetrasOfOrder
     Returns number of tetrahedrons with given order in mesh.
    def NbHexas
     Returns number of hexahedrons in mesh.
    def NbHexasOfOrder
     Returns number of hexahedrons with given order in mesh.
    def NbPyramids
     Returns number of pyramids in mesh.
    def NbPyramidsOfOrder
     Returns number of pyramids with given order in mesh.
    def NbPrisms
     Returns number of prisms in mesh.
    def NbPrismsOfOrder
     Returns number of prisms with given order in mesh.
    def NbPolyhedrons
     Returns number of polyhedrons in mesh.
    def NbSubMesh
     Returns number of submeshes in mesh.
    def GetElementsId
     Returns list of mesh elements ids.
    def GetElementsByType
     Returns list of ids of mesh elements with given type.
    def GetNodesId
     Returns list of mesh nodes ids.
    def GetElementType
     Returns type of mesh element.
    def GetSubMeshElementsId
     Returns list of submesh elements ids.
    def GetSubMeshNodesId
     Returns list of submesh nodes ids.
    def GetSubMeshElementType
     Returns list of ids of submesh elements with given type.
    def Dump
     Get mesh description.
    def GetNodeXYZ
     Get XYZ coordinates of node as list of double
    + If there is not node for given ID - returns empty list.
    def GetNodeInverseElements
     For given node returns list of IDs of inverse elements
    + If there is not node for given ID - returns empty list.
    def GetShapeID
     If given element is node returns IDs of shape from position
    + If there is not node for given ID - returns -1.
    def GetShapeIDForElem
     For given element returns ID of result shape after FindShape() from SMESH_MeshEditor
    + If there is not element for given ID - returns -1.
    def GetElemNbNodes
     Returns number of nodes for given element
    + If there is not element for given ID - returns -1.
    def GetElemNode
     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.
    def IsMediumNode
     Returns true if given node is medium node in given quadratic element.
    def IsMediumNodeOfAnyElem
     Returns true if given node is medium node in one of quadratic elements.
    def ElemNbEdges
     Returns number of edges for given element.
    def ElemNbFaces
     Returns number of faces for given element.
    def IsPoly
     Returns true if given element is polygon.
    def IsQuadratic
     Returns true if given element is quadratic.
    def BaryCenter
     Returns XYZ coordinates of bary center for given element as list of double
    + If there is not element for given ID - returns empty list.
    def RemoveElements
     Removes elements from mesh by ids.
    def RemoveNodes
     Removes nodes from mesh by ids.
    def AddNode
     Add node to mesh by coordinates.
    def AddEdge
     Create edge both similar and quadratic (this is determed by number of given nodes).
    def AddFace
     Create face both similar and quadratic (this is determed by number of given nodes).
    def AddPolygonalFace
     Add polygonal face to mesh by list of nodes ids.
    def AddVolume
     Create volume both similar and quadratic (this is determed by number of given nodes).
    def AddPolyhedralVolume
     Create volume of many faces, giving nodes for each face.
    def AddPolyhedralVolumeByFaces
     Create volume of many faces, giving IDs of existing faces.
    def MoveNode
     Move node with given id.
    def FindNodeClosestTo
     Find a node closest to a point.
    def MeshToPassThroughAPoint
     Find a node closest to a point and move it to a point location.
    def InverseDiag
     Replace two neighbour triangles sharing Node1-Node2 link with ones built on the same 4 nodes but having other common link.
    def DeleteDiag
     Replace two neighbour triangles sharing Node1-Node2 link with a quadrangle built on the same 4 nodes.
    def Reorient
     Reorient elements by ids.
    def ReorientObject
     Reorient all elements of the object.
    def TriToQuad
     Fuse neighbour triangles into quadrangles.
    def TriToQuadObject
     Fuse neighbour triangles of the object into quadrangles.
    def QuadToTri
     Split quadrangles into triangles.
    def QuadToTriObject
     Split quadrangles into triangles.
    def SplitQuad
     Split quadrangles into triangles.
    def SplitQuadObject
     Split quadrangles into triangles.
    def BestSplit
     Find better splitting of the given quadrangle.
    def SplitQuadsNearTriangularFacets
     Split quafrangle faces near triangular facets of volumes.
    def SplitHexaToTetras
     Split hexahedrons into tetrahedrons.
    def SplitHexaToPrisms
     Split hexahedrons into prisms.
    def Smooth
     Smooth elements.
    def SmoothObject
     Smooth elements belong to given object.
    def SmoothParametric
     Parametric smooth the given elements.
    def SmoothParametricObject
     Parametric smooth elements belong to given object.
    def ConvertToQuadratic
     Converts all mesh to quadratic one, deletes old elements, replacing them with quadratic ones with the same id.
    def ConvertFromQuadratic
     Converts all mesh from quadratic to ordinary ones, deletes old quadratic elements,
    + replacing them with ordinary mesh elements with the same id.
    def RenumberNodes
     Renumber mesh nodes.
    def RenumberElements
     Renumber mesh elements.
    def RotationSweep
     Generate new elements by rotation of the elements around the axis.
    def RotationSweepObject
     Generate new elements by rotation of the elements of object around the axis.
    def ExtrusionSweep
     Generate new elements by extrusion of the elements with given ids.
    def AdvancedExtrusion
     Generate new elements by extrusion of the elements with given ids.
    def ExtrusionSweepObject
     Generate new elements by extrusion of the elements belong to object.
    def ExtrusionSweepObject1D
     Generate new elements by extrusion of the elements belong to object.
    def ExtrusionSweepObject2D
     Generate new elements by extrusion of the elements belong to object.
    def ExtrusionAlongPath
     Generate new elements by extrusion of the given elements A path of extrusion must be a meshed edge.
    def ExtrusionAlongPathObject
     Generate new elements by extrusion of the elements belong to object A path of extrusion must be a meshed edge.
    def Mirror
     Symmetrical copy of mesh elements.
    def MirrorObject
     Symmetrical copy of object.
    def Translate
     Translates the elements.
    def TranslateObject
     Translates the object.
    def Rotate
     Rotates the elements.
    def RotateObject
     Rotates the object.
    def FindCoincidentNodes
     Find group of nodes close to each other within Tolerance.
    def FindCoincidentNodesOnPart
     Find group of nodes close to each other within Tolerance.
    def MergeNodes
     Merge nodes.
    def FindEqualElements
     Find elements built on the same nodes.
    def MergeElements
     Merge elements in each given group.
    def MergeEqualElements
     Remove all but one of elements built on the same nodes.
    def SewFreeBorders
     Sew free borders.
    def SewConformFreeBorders
     Sew conform free borders.
    def SewBorderToSide
     Sew border to side.
    def SewSideElements
     Sew two sides of a mesh.
    def ChangeElemNodes
     Set new nodes for given element.
    def GetLastCreatedNodes
     If during last operation of MeshEditor some nodes were created this method returns list of it's IDs,
    + if new nodes not created - returns empty list.
    def GetLastCreatedElems
     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.

    Data Fields

     smeshpyD
     geompyD
     geom
     mesh
     editor

    Static Public Attributes

    int geom = 0
    int mesh = 0
    int editor = 0
    +


    Detailed Description

    +The class contains mesh shape, SMESH_Mesh, SMESH_MeshEditor More details. +

    +


    Member Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.__init__ (  self,
      smeshpyD,
      geompyD,
      obj = 0,
      name = 0 
    )
    +
    +
    + +

    +Creates mesh on the shape geom(or the empty mesh if geom equal to 0), sets GUI name of this mesh to name.

    Parameters:
    + + + +
    obj Shape to be meshed or SMESH_Mesh object
    name Study name of the mesh
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.SetMesh (  self,
      theMesh 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    theMesh is SMESH_Mesh object
    +
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.GetMesh (  self  ) 
    +
    +
    + +

    +

    Returns:
    SMESH_Mesh object
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.GetName (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.SetName (  self,
      name 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.GetSubMesh (  self,
      theSubObject,
      name 
    )
    +
    +
    + +

    +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... +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.GetShape (  self  ) 
    +
    +
    + +

    +

    Returns:
    GEOM_Object
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.SetShape (  self,
      geom 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    geom shape to be meshed(GEOM_Object)
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.IsReadyToCompute (  self,
      theSubObject 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    theMesh is an instance of Mesh class
    theSubObject subshape of a mesh shape
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.GetAlgoState (  self,
      theSubObject 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    theMesh is an instance of Mesh class
    theSubObject subshape of a mesh shape
    +
    +
    Returns:
    a list of errors
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.GetGeometryByMeshElement (  self,
      theElementID,
      theGeomName 
    )
    +
    +
    + +

    +The returned geometrical object, if not nil, is either found in the study or is published by this method with the given name

    Parameters:
    + + + + +
    theMesh is an instance of Mesh class
    theElementID an id of the mesh element
    theGeomName user defined name of geometrical object
    +
    +
    Returns:
    GEOM.GEOM_Object instance
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.MeshDimension (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.Segment (  self,
      algo = REGULAR,
      geom = 0 
    )
    +
    +
    + +

    +If the optional algo parameter is not sets, this algorithm is REGULAR. If the optional geom parameter is not sets, this algorithm is global.
    + Otherwise, this algorithm define a submesh based on geom subshape.

    Parameters:
    + + + +
    algo values are smesh.REGULAR or smesh.PYTHON for discretization via python function
    geom If defined, subshape to be meshed
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.Triangle (  self,
      algo = MEFISTO,
      geom = 0 
    )
    +
    +
    + +

    +If the optional geom parameter is not sets, this algorithm is global.
    + Otherwise, this algorithm define a submesh based on geom subshape.

    Parameters:
    + + + +
    algo values are: smesh.MEFISTO or smesh.NETGEN
    geom If defined, subshape to be meshed
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.Quadrangle (  self,
      geom = 0 
    )
    +
    +
    + +

    +If the optional geom parameter is not sets, this algorithm is global.
    + Otherwise, this algorithm define a submesh based on geom subshape.

    Parameters:
    + + +
    geom If defined, subshape to be meshed
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.Tetrahedron (  self,
      algo = NETGEN,
      geom = 0 
    )
    +
    +
    + +

    +The parameter algo permits to choice the algorithm: NETGEN or GHS3D If the optional geom parameter is not sets, this algorithm is global.
    + Otherwise, this algorithm define a submesh based on geom subshape.

    Parameters:
    + + + +
    algo values are: smesh.NETGEN, smesh.GHS3D, smesh.FULL_NETGEN
    geom If defined, subshape to be meshed
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.Hexahedron (  self,
      geom = 0 
    )
    +
    +
    + +

    +If the optional geom parameter is not sets, this algorithm is global.
    + Otherwise, this algorithm define a submesh based on geom subshape.

    Parameters:
    + + +
    geom If defined, subshape to be meshed
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.Netgen (  self,
      is3D,
      geom = 0 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.Projection1D (  self,
      geom = 0 
    )
    +
    +
    + +

    +If the optional geom parameter is not sets, this algorithm is global. Otherwise, this algorithm define a submesh based on geom subshape.

    Parameters:
    + + +
    geom If defined, subshape to be meshed
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.Projection2D (  self,
      geom = 0 
    )
    +
    +
    + +

    +If the optional geom parameter is not sets, this algorithm is global. Otherwise, this algorithm define a submesh based on geom subshape.

    Parameters:
    + + +
    geom If defined, subshape to be meshed
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.Projection3D (  self,
      geom = 0 
    )
    +
    +
    + +

    +If the optional geom parameter is not sets, this algorithm is global. Otherwise, this algorithm define a submesh based on geom subshape.

    Parameters:
    + + +
    geom If defined, subshape to be meshed
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.Prism (  self,
      geom = 0 
    )
    +
    +
    + +

    +If the optional geom parameter is not sets, this algorithm is global. Otherwise, this algorithm define a submesh based on geom subshape.

    Parameters:
    + + +
    geom If defined, subshape to be meshed
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.Compute (  self,
      geom = 0 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.AutomaticTetrahedralization (  self,
      fineness = 0 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.AutomaticHexahedralization (  self,
      fineness = 0 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.AddHypothesis (  self,
      hyp,
      geom = 0 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    hyp is a hypothesis to assign
    geom is subhape of mesh geometry
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.GetHypothesisList (  self,
      geom 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    geom is subhape of mesh geometry
    +
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.RemoveGlobalHypotheses (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.Group (  self,
      grp,
      name = "" 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    grp is a geometric group, a vertex, an edge, a face or a solid
    name is the name of the mesh group
    +
    +
    Returns:
    SMESH_GroupOnGeom
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.ExportToMED (  self,
      f,
      version,
      opt = 0 
    )
    +
    +
    + +

    +Export the mesh in a file with the MED format and choice the version of MED format

    Parameters:
    + + + +
    f is the file name
    version values are SMESH.MED_V2_1, SMESH.MED_V2_2
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.ExportMED (  self,
      f,
      auto_groups = 0,
      version = MED_V2_2 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + +
    f is the file name
    auto_groups boolean parameter for creating/not creating the groups Group_On_All_Nodes, Group_On_All_Faces, ... ; the typical use is auto_groups=false.
    version MED format version(MED_V2_1 or MED_V2_2)
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.ExportDAT (  self,
      f 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    f is the file name
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.ExportUNV (  self,
      f 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    f is the file name
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.ExportSTL (  self,
      f,
      ascii = 1 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    f is the file name
    ascii defined the kind of file contents
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.CreateEmptyGroup (  self,
      elementType,
      name 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    elementType is the type of elements in the group
    name is the name of the mesh group
    +
    +
    Returns:
    SMESH_Group
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.GroupOnGeom (  self,
      grp,
      name = "",
      typ = None 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    grp is a geometric group, a vertex, an edge, a face or a solid
    name is the name of the mesh group
    +
    +
    Returns:
    SMESH_GroupOnGeom
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.MakeGroupByIds (  self,
      groupName,
      elementType,
      elemIDs 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + +
    groupName is the name of the mesh group
    elementType is the type of elements in the group
    elemIDs is the list of ids
    +
    +
    Returns:
    SMESH_Group
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.MakeGroup (  self,
      groupName,
      elementType,
      CritType = FT_Undefined,
      Compare = FT_EqualTo,
      Treshold = "",
      UnaryOp = FT_Undefined 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + + + + +
    groupName is the name of the mesh group
    elementType is the type of elements in the group
    CritType is type of criterion( FT_Taper, FT_Area, FT_RangeOfIds, FT_LyingOnGeom etc. )
    Compare belong to {FT_LessThan, FT_MoreThan, FT_EqualTo}
    Treshold is threshold value (range of id ids as string, shape, numeric)
    UnaryOp is FT_LogicalNOT or FT_Undefined
    +
    +
    Returns:
    SMESH_Group
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.MakeGroupByCriterion (  self,
      groupName,
      Criterion 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    groupName is the name of the mesh group
    Criterion is the instance of Criterion class
    +
    +
    Returns:
    SMESH_Group
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.MakeGroupByCriteria (  self,
      groupName,
      theCriteria 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    groupName is the name of the mesh group
    Criteria is the list of criterions
    +
    +
    Returns:
    SMESH_Group
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.MakeGroupByFilter (  self,
      groupName,
      theFilter 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    groupName is the name of the mesh group
    Criterion is the instance of Filter class
    +
    +
    Returns:
    SMESH_Group
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.GetIdsFromFilter (  self,
      theFilter 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    theFilter is SMESH_Filter
    +
    +
    Returns:
    list of ids
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.GetFreeBorders (  self  ) 
    +
    +
    + +

    +

    Returns:
    list of SMESH.FreeEdges.Border structure: edge id and two its nodes ids.
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.RemoveGroup (  self,
      group 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.RemoveGroupWithContents (  self,
      group 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.GetGroups (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.GetGroupNames (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.UnionGroups (  self,
      group1,
      group2,
      name 
    )
    +
    +
    + +

    +All mesh elements that are present in initial groups are added to the new one +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.IntersectGroups (  self,
      group1,
      group2,
      name 
    )
    +
    +
    + +

    +All mesh elements that are present in both initial groups are added to the new one. +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.CutGroups (  self,
      mainGroup,
      toolGroup,
      name 
    )
    +
    +
    + +

    +All mesh elements that are present in main group but do not present in tool group are added to the new one +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.GetLog (  self,
      clearAfterGet 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    clearAfterGet log is emptied after Get (safe if concurrents access)
    +
    +
    Returns:
    list of log_block structures: commandType number coords indexes
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.ClearLog (  self  ) 
    +
    +
    + +

    +Must be used immediately after GetLog if clearAfterGet is false. +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.GetId (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.GetStudyId (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.HasDuplicatedGroupNamesMED (  self  ) 
    +
    +
    + +

    +Consider maximum group name length stored in MED file. +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.GetMeshEditor (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.GetMEDMesh (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.NbNodes (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.NbElements (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.NbEdges (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.NbEdgesOfOrder (  self,
      elementOrder 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    elementOrder is order of elements: ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
    +
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.NbFaces (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.NbFacesOfOrder (  self,
      elementOrder 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    elementOrder is order of elements: ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
    +
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.NbTriangles (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.NbTrianglesOfOrder (  self,
      elementOrder 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    elementOrder is order of elements: ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
    +
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.NbQuadrangles (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.NbQuadranglesOfOrder (  self,
      elementOrder 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    elementOrder is order of elements: ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
    +
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.NbPolygons (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.NbVolumes (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.NbVolumesOfOrder (  self,
      elementOrder 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    elementOrder is order of elements: ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
    +
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.NbTetras (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.NbTetrasOfOrder (  self,
      elementOrder 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    elementOrder is order of elements: ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
    +
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.NbHexas (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.NbHexasOfOrder (  self,
      elementOrder 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    elementOrder is order of elements: ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
    +
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.NbPyramids (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.NbPyramidsOfOrder (  self,
      elementOrder 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    elementOrder is order of elements: ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
    +
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.NbPrisms (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.NbPrismsOfOrder (  self,
      elementOrder 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    elementOrder is order of elements: ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
    +
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.NbPolyhedrons (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.NbSubMesh (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.GetElementsId (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.GetElementsByType (  self,
      elementType 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    elementType is required type of elements
    +
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.GetNodesId (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.GetElementType (  self,
      id,
      iselem 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.GetSubMeshElementsId (  self,
      shapeID 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    shapeID is geom object(subshape) IOR
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.GetSubMeshNodesId (  self,
      shapeID,
      all 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    shapeID is geom object(subshape) IOR
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.GetSubMeshElementType (  self,
      shapeID 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    shapeID is geom object(subshape) IOR
    +
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.Dump (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.GetNodeXYZ (  self,
      id 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.GetNodeInverseElements (  self,
      id 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.GetShapeID (  self,
      id 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.GetShapeIDForElem (  self,
      id 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.GetElemNbNodes (  self,
      id 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.GetElemNode (  self,
      id,
      index 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.IsMediumNode (  self,
      elementID,
      nodeID 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.IsMediumNodeOfAnyElem (  self,
      nodeID,
      elementType 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.ElemNbEdges (  self,
      id 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.ElemNbFaces (  self,
      id 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.IsPoly (  self,
      id 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.IsQuadratic (  self,
      id 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.BaryCenter (  self,
      id 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.RemoveElements (  self,
      IDsOfElements 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    IDsOfElements is list of ids of elements to remove
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.RemoveNodes (  self,
      IDsOfNodes 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    IDsOfNodes is list of ids of nodes to remove
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.AddNode (  self,
      x,
      y,
      z 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.AddEdge (  self,
      IDsOfNodes 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    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.
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.AddFace (  self,
      IDsOfNodes 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    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.
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.AddPolygonalFace (  self,
      IdsOfNodes 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.AddVolume (  self,
      IDsOfNodes 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    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.
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.AddPolyhedralVolume (  self,
      IdsOfNodes,
      Quantities 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    IdsOfNodes List of node IDs for volume creation face by face.
    Quantities List of integer values, Quantities[i] gives quantity of nodes in face number i.
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.AddPolyhedralVolumeByFaces (  self,
      IdsOfFaces 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    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. +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.MoveNode (  self,
      NodeID,
      x,
      y,
      z 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + + +
    NodeID id of the node
    x new X coordinate
    y new Y coordinate
    z new Z coordinate
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.FindNodeClosestTo (  self,
      x,
      y,
      z 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + +
    x X coordinate of a point
    y Y coordinate of a point
    z Z coordinate of a point
    +
    +
    Returns:
    id of a node
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.MeshToPassThroughAPoint (  self,
      x,
      y,
      z 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + +
    x X coordinate of a point
    y Y coordinate of a point
    z Z coordinate of a point
    +
    +
    Returns:
    id of a moved node
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.InverseDiag (  self,
      NodeID1,
      NodeID2 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    NodeID1 first node id
    NodeID2 second node id
    +
    +
    Returns:
    false if proper faces not found
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.DeleteDiag (  self,
      NodeID1,
      NodeID2 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    NodeID1 first node id
    NodeID2 second node id
    +
    +
    Returns:
    false if proper faces not found
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.Reorient (  self,
      IDsOfElements = None 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    IDsOfElements if undefined reorient all mesh elements
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.ReorientObject (  self,
      theObject 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    theObject is mesh, submesh or group
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.TriToQuad (  self,
      IDsOfElements,
      theCriterion,
      MaxAngle 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + +
    IDsOfElements The triangles to be fused,
    theCriterion is FT_...; used to choose a neighbour to fuse with.
    MaxAngle is a max angle between element normals at which fusion is still performed; theMaxAngle is mesured in radians.
    +
    +
    Returns:
    TRUE in case of success, FALSE otherwise.
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.TriToQuadObject (  self,
      theObject,
      theCriterion,
      MaxAngle 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + +
    theObject is mesh, submesh or group
    theCriterion is FT_...; used to choose a neighbour to fuse with.
    MaxAngle is a max angle between element normals at which fusion is still performed; theMaxAngle is mesured in radians.
    +
    +
    Returns:
    TRUE in case of success, FALSE otherwise.
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.QuadToTri (  self,
      IDsOfElements,
      theCriterion 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + +
    IDsOfElements the faces to be splitted.
    theCriterion is FT_...; used to choose a diagonal for splitting.
     TRUE in case of success, FALSE otherwise.
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.QuadToTriObject (  self,
      theObject,
      theCriterion 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    theObject object to taking list of elements from, is mesh, submesh or group
    theCriterion is FT_...; used to choose a diagonal for splitting.
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.SplitQuad (  self,
      IDsOfElements,
      Diag13 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    theElems The faces to be splitted
    the13Diag is used to choose a diagonal for splitting.
    +
    +
    Returns:
    TRUE in case of success, FALSE otherwise.
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.SplitQuadObject (  self,
      theObject,
      Diag13 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    theObject is object to taking list of elements from, is mesh, submesh or group
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.BestSplit (  self,
      IDOfQuad,
      theCriterion 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    IDOfQuad ID of the quadrangle to be splitted.
    theCriterion is FT_...; a criterion to choose a diagonal for splitting.
    +
    +
    Returns:
    1 if 1-3 diagonal is better, 2 if 2-4 diagonal is better, 0 if error occurs.
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.SplitQuadsNearTriangularFacets (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.SplitHexaToTetras (  self,
      theObject,
      theNode000,
      theNode001 
    )
    +
    +
    + +

    +Use pattern mapping functionality for splitting.

    Parameters:
    + + + + +
    theObject object to take list of hexahedrons from; is mesh, submesh or group.
    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.
     TRUE in case of success, FALSE otherwise.
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.SplitHexaToPrisms (  self,
      theObject,
      theNode000,
      theNode001 
    )
    +
    +
    + +

    +Use pattern mapping functionality for splitting.

    Parameters:
    + + + + +
    theObject object to take list of hexahedrons from; is mesh, submesh or group.
    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.
     TRUE in case of success, FALSE otherwise.
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.Smooth (  self,
      IDsOfElements,
      IDsOfFixedNodes,
      MaxNbOfIterations,
      MaxAspectRatio,
      Method 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + + + +
    IDsOfElements list if ids of elements to smooth
    IDsOfFixedNodes list of ids of fixed nodes. Note that nodes built on edges and boundary nodes are always fixed.
    MaxNbOfIterations maximum number of iterations
    MaxAspectRatio varies in range [1.0, inf]
    Method is Laplacian(LAPLACIAN_SMOOTH) or Centroidal(CENTROIDAL_SMOOTH)
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.SmoothObject (  self,
      theObject,
      IDsOfFixedNodes,
      MaxNbOfIterations,
      MaxxAspectRatio,
      Method 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + + + +
    theObject object to smooth
    IDsOfFixedNodes list of ids of fixed nodes. Note that nodes built on edges and boundary nodes are always fixed.
    MaxNbOfIterations maximum number of iterations
    MaxAspectRatio varies in range [1.0, inf]
    Method is Laplacian(LAPLACIAN_SMOOTH) or Centroidal(CENTROIDAL_SMOOTH)
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.SmoothParametric (  self,
      IDsOfElements,
      IDsOfFixedNodes,
      MaxNbOfIterations,
      MaxAspectRatio,
      Method 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + + + +
    IDsOfElements list if ids of elements to smooth
    IDsOfFixedNodes list of ids of fixed nodes. Note that nodes built on edges and boundary nodes are always fixed.
    MaxNbOfIterations maximum number of iterations
    MaxAspectRatio varies in range [1.0, inf]
    Method is Laplacian(LAPLACIAN_SMOOTH) or Centroidal(CENTROIDAL_SMOOTH)
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.SmoothParametricObject (  self,
      theObject,
      IDsOfFixedNodes,
      MaxNbOfIterations,
      MaxAspectRatio,
      Method 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + + + +
    theObject object to smooth
    IDsOfFixedNodes list of ids of fixed nodes. Note that nodes built on edges and boundary nodes are always fixed.
    MaxNbOfIterations maximum number of iterations
    MaxAspectRatio varies in range [1.0, inf]
    Method is Laplacian(LAPLACIAN_SMOOTH) or Centroidal(CENTROIDAL_SMOOTH)
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.ConvertToQuadratic (  self,
      theForce3d 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.ConvertFromQuadratic (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.RenumberNodes (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.RenumberElements (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.RotationSweep (  self,
      IDsOfElements,
      Axix,
      AngleInRadians,
      NbOfSteps,
      Tolerance 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + + + +
    IDsOfElements list of ids of elements to sweep
    Axix axis of rotation, AxisStruct or line(geom object)
    AngleInRadians angle of Rotation
    NbOfSteps number of steps
    Tolerance tolerance
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.RotationSweepObject (  self,
      theObject,
      Axix,
      AngleInRadians,
      NbOfSteps,
      Tolerance 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + + + +
    theObject object wich elements should be sweeped
    Axix axis of rotation, AxisStruct or line(geom object)
    AngleInRadians angle of Rotation
    NbOfSteps number of steps
    Tolerance tolerance
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.ExtrusionSweep (  self,
      IDsOfElements,
      StepVector,
      NbOfSteps 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + +
    IDsOfElements list of elements ids for extrusion
    StepVector vector, defining the direction and value of extrusion
    NbOfSteps the number of steps
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.AdvancedExtrusion (  self,
      IDsOfElements,
      StepVector,
      NbOfSteps,
      ExtrFlags,
      SewTolerance 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + + + +
    IDsOfElements is ids of elements
    StepVector vector, defining the direction and value of extrusion
    NbOfSteps the number of steps
    ExtrFlags set flags for performing extrusion
    SewTolerance uses for comparing locations of nodes if flag EXTRUSION_FLAG_SEW is set
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.ExtrusionSweepObject (  self,
      theObject,
      StepVector,
      NbOfSteps 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + +
    theObject object wich elements should be processed
    StepVector vector, defining the direction and value of extrusion
    NbOfSteps the number of steps
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.ExtrusionSweepObject1D (  self,
      theObject,
      StepVector,
      NbOfSteps 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + +
    theObject object wich elements should be processed
    StepVector vector, defining the direction and value of extrusion
    NbOfSteps the number of steps
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.ExtrusionSweepObject2D (  self,
      theObject,
      StepVector,
      NbOfSteps 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + +
    theObject object wich elements should be processed
    StepVector vector, defining the direction and value of extrusion
    NbOfSteps the number of steps
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.ExtrusionAlongPath (  self,
      IDsOfElements,
      PathMesh,
      PathShape,
      NodeStart,
      HasAngles,
      Angles,
      HasRefPoint,
      RefPoint,
      LinearVariation = False 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + + + + + + + +
    IDsOfElements is ids of elements
    PathMesh mesh containing a 1D sub-mesh on the edge, along which proceeds the extrusion
    PathShape is shape(edge); as the mesh can be complex, the edge is used to define the sub-mesh for the path
    NodeStart the first or the last node on the edge. It is used to define the direction of extrusion
    HasAngles allows the shape to be rotated around the path to get the resulting mesh in a helical fashion
    Angles list of angles
    HasRefPoint allows to use base point
    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.
    LinearVariation makes compute rotation angles as linear variation of given Angles along path steps
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.ExtrusionAlongPathObject (  self,
      theObject,
      PathMesh,
      PathShape,
      NodeStart,
      HasAngles,
      Angles,
      HasRefPoint,
      RefPoint,
      LinearVariation = False 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + + + + + + + +
    IDsOfElements is ids of elements
    PathMesh mesh containing a 1D sub-mesh on the edge, along which proceeds the extrusion
    PathShape is shape(edge); as the mesh can be complex, the edge is used to define the sub-mesh for the path
    NodeStart the first or the last node on the edge. It is used to define the direction of extrusion
    HasAngles allows the shape to be rotated around the path to get the resulting mesh in a helical fashion
    Angles list of angles
    HasRefPoint allows to use base point
    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.
    LinearVariation makes compute rotation angles as linear variation of given Angles along path steps
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.Mirror (  self,
      IDsOfElements,
      Mirror,
      theMirrorType,
      Copy = 0 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + + +
    IDsOfElements list of elements ids
    Mirror is AxisStruct or geom object(point, line, plane)
    theMirrorType is POINT, AXIS or PLANE If the Mirror is geom object this parameter is unnecessary
    Copy allows to copy element(Copy is 1) or to replace with its mirroring(Copy is 0)
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.MirrorObject (  self,
      theObject,
      Mirror,
      theMirrorType,
      Copy = 0 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + + +
    theObject mesh, submesh or group
    Mirror is AxisStruct or geom object(point, line, plane)
    theMirrorType is POINT, AXIS or PLANE If the Mirror is geom object this parameter is unnecessary
    Copy allows to copy element(Copy is 1) or to replace with its mirroring(Copy is 0)
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.Translate (  self,
      IDsOfElements,
      Vector,
      Copy 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + +
    IDsOfElements list of elements ids
    Vector direction of translation(DirStruct or vector)
    Copy allows to copy the translated elements
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.TranslateObject (  self,
      theObject,
      Vector,
      Copy 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + +
    theObject object to translate(mesh, submesh, or group)
    Vector direction of translation(DirStruct or geom vector)
    Copy allows to copy the translated elements
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.Rotate (  self,
      IDsOfElements,
      Axis,
      AngleInRadians,
      Copy 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + + +
    IDsOfElements list of elements ids
    Axis axis of rotation(AxisStruct or geom line)
    AngleInRadians angle of rotation(in radians)
    Copy allows to copy the rotated elements
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.RotateObject (  self,
      theObject,
      Axis,
      AngleInRadians,
      Copy 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + + +
    theObject object to rotate(mesh, submesh, or group)
    Axis axis of rotation(AxisStruct or geom line)
    AngleInRadians angle of rotation(in radians)
    Copy allows to copy the rotated elements
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.FindCoincidentNodes (  self,
      Tolerance 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    Tolerance tolerance value
    list of group of nodes
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.FindCoincidentNodesOnPart (  self,
      SubMeshOrGroup,
      Tolerance 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + +
    Tolerance tolerance value
    SubMeshOrGroup SubMesh or Group
    list of group of nodes
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.MergeNodes (  self,
      GroupsOfNodes 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    list of group of nodes
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.FindEqualElements (  self,
      MeshOrSubMeshOrGroup 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    MeshOrSubMeshOrGroup Mesh or SubMesh, or Group of elements for searching
    +
    +
    Returns:
    a list of groups of equal elements
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.MergeElements (  self,
      GroupsOfElementsID 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    GroupsOfElementsID groups of elements for merging
    +
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.MergeEqualElements (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.SewFreeBorders (  self,
      FirstNodeID1,
      SecondNodeID1,
      LastNodeID1,
      FirstNodeID2,
      SecondNodeID2,
      LastNodeID2,
      CreatePolygons,
      CreatePolyedrs 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.SewConformFreeBorders (  self,
      FirstNodeID1,
      SecondNodeID1,
      LastNodeID1,
      FirstNodeID2,
      SecondNodeID2 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.SewBorderToSide (  self,
      FirstNodeIDOnFreeBorder,
      SecondNodeIDOnFreeBorder,
      LastNodeIDOnFreeBorder,
      FirstNodeIDOnSide,
      LastNodeIDOnSide,
      CreatePolygons,
      CreatePolyedrs 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.SewSideElements (  self,
      IDsOfSide1Elements,
      IDsOfSide2Elements,
      NodeID1OfSide1ToMerge,
      NodeID1OfSide2ToMerge,
      NodeID2OfSide1ToMerge,
      NodeID2OfSide2ToMerge 
    )
    +
    +
    + +

    +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. +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh.ChangeElemNodes (  self,
      ide,
      newIDs 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    ide the element id
    newIDs nodes ids
    +
    +
    Returns:
    If number of nodes is not corresponded to type of element - returns false
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.GetLastCreatedNodes (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh.GetLastCreatedElems (  self  ) 
    +
    +
    + +

    + +

    +

    +


    Field Documentation

    + +
    +
    + + + + +
    int smeshDC.Mesh.geom = 0 [static]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    int smeshDC.Mesh.mesh = 0 [static]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    int smeshDC.Mesh.editor = 0 [static]
    +
    +
    + +

    + +

    +

    + +

    + +
    + +

    + +

    +

    + +

    + +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh.geom
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh.mesh
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh.editor
    +
    +
    + +

    + +

    +

    + +

    + + diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Algorithm.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Algorithm.html new file mode 100644 index 000000000..eb602f62b --- /dev/null +++ b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Algorithm.html @@ -0,0 +1,408 @@ + + + + + + Main Page + + + + +  + + + + +

    smeshDC.Mesh_Algorithm Class Reference

    Mother class to define algorithm, recommended to don't use directly. +More... +

    +Inheritance diagram for smeshDC.Mesh_Algorithm:

    Inheritance graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Public Member Functions

    def __init__
    def GetSubMesh
     If the algorithm is global, return 0;
    + else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     smesh
     mesh
     geom
     subm
     algo
    +

    Detailed Description

    +More details. +

    +


    Member Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.__init__ (  self,
      smesh 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetSubMesh (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetAlgorithm (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetCompatibleHypothesis (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetName (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.SetName (  self,
      name 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetId (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Create (  self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so" 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Hypothesis (  self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so" 
    )
    +
    +
    + +

    + +

    +

    +


    Field Documentation

    + +
    + +
    + +

    + +

    +

    + +

    + +
    + +

    + +

    +

    + +

    + +
    + +

    + +

    +Reimplemented in smeshDC.Mesh_Segment. +

    +

    + +

    + +
    + +

    + +

    +

    + +

    + +
    + +

    + +

    +

    + +

    + + diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Algorithm__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Algorithm__inherit__graph.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0380c6a142c1e5a8451b024e7f490f7f6ddd1753 GIT binary patch literal 39007 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 R33sWXwEur`pa_0U{} + + + + + Main Page + + + + +  + + + +

    +

    smeshDC.Mesh_CompositeSegment Class Reference

    Class to define a segment 1D algorithm for discretization. +More... +

    +Inheritance diagram for smeshDC.Mesh_CompositeSegment:

    Inheritance graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Public Member Functions

    def __init__
     Private constructor.
    def __init__
    def LocalLength
     Define "LocalLength" hypothesis to cut an edge in several segments with the same length.
    def NumberOfSegments
     Define "NumberOfSegments" hypothesis to cut an edge in several fixed number of segments.
    def Arithmetic1D
     Define "Arithmetic1D" hypothesis to cut an edge in several segments with arithmetic length increasing.
    def StartEndLength
     Define "StartEndLength" hypothesis to cut an edge in several segments with geometric length increasing.
    def Deflection1D
     Define "Deflection1D" hypothesis.
    def Propagation
     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 AutomaticLength
     Define "AutomaticLength" hypothesis.
    def LengthNearVertex
     Define "SegmentLengthAroundVertex" hypothesis.
    def QuadraticMesh
     Define "QuadraticMesh" hypothesis, forcing construction of quadratic edges.
    def GetSubMesh
     If the algorithm is global, return 0;
    + else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     geom
     smesh
     mesh
     subm
     algo
    +

    Detailed Description

    +More details. +

    +


    Member Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_CompositeSegment.__init__ (  self,
      mesh,
      geom = 0 
    )
    +
    +
    + +

    + +

    +Reimplemented from smeshDC.Mesh_Segment. +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.__init__ (  self,
      smesh 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment.LocalLength (  self,
      l 
    ) [inherited]
    +
    +
    + +

    +

    Parameters:
    + + +
    l for the length of segments that cut an edge
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment.NumberOfSegments (  self,
      n,
      s = [] 
    ) [inherited]
    +
    +
    + +

    +

    Parameters:
    + + + +
    n for the number of segments that cut an edge
    s for the scale factor (optional)
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment.Arithmetic1D (  self,
      start,
      end 
    ) [inherited]
    +
    +
    + +

    +

    Parameters:
    + + + +
    start for the length of the first segment
    end for the length of the last segment
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment.StartEndLength (  self,
      start,
      end 
    ) [inherited]
    +
    +
    + +

    +

    Parameters:
    + + + +
    start for the length of the first segment
    end for the length of the last segment
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment.Deflection1D (  self,
      d 
    ) [inherited]
    +
    +
    + +

    +

    Parameters:
    + + +
    d for the deflection
    +
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Segment.Propagation (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment.AutomaticLength (  self,
      fineness = 0 
    ) [inherited]
    +
    +
    + +

    +

    Parameters:
    + + +
    fineness for the fineness [0-1]
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment.LengthNearVertex (  self,
      length,
      vertex = 0 
    ) [inherited]
    +
    +
    + +

    +

    Parameters:
    + + + +
    length for the segment length
    vertex for the length localization: vertex index [0,1] | verext object
    +
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Segment.QuadraticMesh (  self  )  [inherited]
    +
    +
    + +

    +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 smeshDC.Mesh_Algorithm.GetSubMesh (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetAlgorithm (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetCompatibleHypothesis (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetName (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.SetName (  self,
      name 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetId (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Create (  self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Hypothesis (  self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    +


    Field Documentation

    + +
    +
    + + + + +
    smeshDC.Mesh_Segment.geom [inherited]
    +
    +
    + +

    + +

    +Reimplemented from smeshDC.Mesh_Algorithm. +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.smesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.mesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.subm [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.algo [inherited]
    +
    +
    + +

    + +

    +

    + +

    + + diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__CompositeSegment__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__CompositeSegment__inherit__graph.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7d2fc4773e0658181367ec0cf22f098f5005ecd6 GIT binary patch literal 9319 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 + + + + + Main Page + + + + +  + + + + +

    smeshDC.Mesh_Hexahedron Class Reference

    Class to define a hexahedron 3D algorithm. +More... +

    +Inheritance diagram for smeshDC.Mesh_Hexahedron:

    Inheritance graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Public Member Functions

    def __init__
     Private constructor.
    def __init__
    def GetSubMesh
     If the algorithm is global, return 0;
    + else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     smesh
     mesh
     geom
     subm
     algo
    +

    Detailed Description

    +More details. +

    +


    Member Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Hexahedron.__init__ (  self,
      mesh,
      geom = 0 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.__init__ (  self,
      smesh 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetSubMesh (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetAlgorithm (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetCompatibleHypothesis (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetName (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.SetName (  self,
      name 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetId (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Create (  self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Hypothesis (  self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    +


    Field Documentation

    + +
    +
    + + + + +
    smeshDC.Mesh_Algorithm.smesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.mesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.geom [inherited]
    +
    +
    + +

    + +

    +Reimplemented in smeshDC.Mesh_Segment. +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.subm [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.algo [inherited]
    +
    +
    + +

    + +

    +

    + +

    + + diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Hexahedron__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Hexahedron__inherit__graph.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9453963803b85899b82ac9b496ba82c7bd42254b GIT binary patch literal 6117 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Netgen.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Netgen.html new file mode 100644 index 000000000..8052b1916 --- /dev/null +++ b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Netgen.html @@ -0,0 +1,502 @@ + + + + + + Main Page + + + + +  + + + + +

    smeshDC.Mesh_Netgen Class Reference

    Class to define a NETGEN-based 2D or 3D algorithm that need no discrete boundary (i.e. +More... +

    +Inheritance diagram for smeshDC.Mesh_Netgen:

    Inheritance graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Public Member Functions

    def __init__
     Private constructor.
    def Parameters
     Define hypothesis containing parameters of the algorithm.
    def __init__
    def GetSubMesh
     If the algorithm is global, return 0;
    + else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     is3D
     smesh
     mesh
     geom
     subm
     algo

    Static Public Attributes

    int is3D = 0
    +

    Detailed Description

    +independent)

    +This class is deprecated, only for compatibility!

    +More details. +

    +


    Member Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Netgen.__init__ (  self,
      mesh,
      is3D,
      geom = 0 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Netgen.Parameters (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.__init__ (  self,
      smesh 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetSubMesh (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetAlgorithm (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetCompatibleHypothesis (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetName (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.SetName (  self,
      name 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetId (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Create (  self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Hypothesis (  self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    +


    Field Documentation

    + +
    +
    + + + + +
    int smeshDC.Mesh_Netgen.is3D = 0 [static]
    +
    +
    + +

    + +

    +

    + +

    + +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.smesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.mesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.geom [inherited]
    +
    +
    + +

    + +

    +Reimplemented in smeshDC.Mesh_Segment. +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.subm [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.algo [inherited]
    +
    +
    + +

    + +

    +

    + +

    + + diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Netgen__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Netgen__inherit__graph.jpg new file mode 100644 index 0000000000000000000000000000000000000000..73b7e43a07955eb9f816fd35cbc132a9c362d4e1 GIT binary patch literal 5726 zcmeH~XH-+$w#Rn}HPlc;M~a{n1?k051Vn@=AVuI%mEKzbC4f>49gm=b6zNrZXwsxB zy$L~j6Qv`a13MmHaj~mBLOxy&u68_Hw={Wf-BH)%@s*aiB*J6+ z;Gva|vp0{2kCn57w?71r1=Ij?Qc^Nf5^^#!G71WE2o)nW6(uDVD?I}(BPSa-7bhDB z2M@oPAP=ty9|wn!%q5Yl;*ye*+=6mSvJ#47*CZwWZ~~&BprE3pf>Be$Brb4VkocDy zz6F4i1Kz*@7{m(@K|x?B2;UBH6F5mge>UL18i)u?OhQUVP644LyiiRC5P`s8B4RKJ z2{AF@?Z<@Y05Oz={(`s)DZ^bWGF}fxiI9X$az54aRwlinZT@T4o}m;FW)>JLo4`du zp-Yz~rKDwK<>b|FsB386)Vif_aL>@l*yO$qK`c9a2S+b&A74MDf54NcVc`*x&(Mj_ ze}9pb{PNZ7w^`Xaxq0~og%y=m)is#fy85;c?H!$6-95d-Bco&E6Q3ui<`)*1mRDBS zzOL`=?(P3LI6OK&`GX4tfd7s~IR72&7cMA)i-?#QOicC%7l_D@U|=XQ$pvvzdX>9m zRvrwz5+US_stK9ptrUFM^tPF-J%=F7{F3tmJAa`4N%q&kLjNtY{|5UXt|@>D3?c*% z3}=Io4xQ=+-K!@=HdJb+Dp;#K8nJf|I!h`0r83YDU8bYHIE zf~p73xMuLc&N_UadKeF^elx=Zts7f-fGdM06upWEe!ZRb%Xh%q|NHun>D3xW2naWF zDb2s}jp_-b|B8c!wRta^vRuTykc@wy5VATvK!oa1+@3fOEkW(;O{fs!83JEQLptGF z4VzCc*%QS*d!$n2AYb2J;%1c-c@H=1Wh45@<-$V}Sm*i$faExZXY-)A_RMs_Ci_D% ztSYZ2`JRiE=u=PO8rS>8UKbZg$<0bfQW+9bX)5)%$CHZ(R%Saqgf25Juy|(c0iNK_ zVkjP%QyxkFP_OrO$C%P$-@X(#^=w6k!N1A(`zrh!&3EsOXb)wMzQbrA9f*=6_HOL> z=5Dvi%Lmn=>YAswW7wW>t=d%op2(Q^0S1g@>>wf^4*#$reI+o~m!)i3>ms%=^gz>D zj_%`Lr3Q#!m~&R_s;+Qe?Vxu<-MgIHDibaoY_4v)J>rJQ9UEC<7Hjg>o&zT0AlQg? zMcUB)vo3MNhmSSpvq=J6;+vMcPWkVU33!x#lR4yKXO=H1#^^ad$9{~`D!Hp%oq*N> z%RTN5a>u+9Zu@<+6!F*C)h7r8yyO79U|7VGF@>1F&_r@btyUyz4W& z3knMClu_6Q@A$~&XAi;k#W|j*xRFCdq?& z`VqmPEpVaY4bAp|zVUE~<5f-#C4EF(xAvv)TuOWSmv|d0C9W>=0Wn{k%B!|(Uf3`W zDPz*i%KZhnPW;HzB3b(fj%Y5G9cikEu?F=?7LR;zAD%YXmWY!z7-&TYG^!-fXAJ&ZB1z z5$oK5U>&C&y|(O)Q{|H)jvvHSrHC2 zmCbC5;j3$KnjG4e<;UjlE?YMHybPrsyaTR|V|E;muxPGAe>{~@eZf~7Zr~-=)txA( zK}BR`3-Tp3mN6{NFhfoohi5)4``sbHuBSKJY-T`>q6~*|8cQFpT3VL=LXLP!YzpoEC7a|(-!cpUac+P?IFrO>u zqOa>At7q(ZfJY(y6tZq{Vk!lAGkyGwRNcBgQc^5(W?ri4iC>r=kw2h`FCRVm21`IxI7A_Pvy15X1D@IdAOp)@s1Tb#vdp7BlPozn!Yo*!4> zfu(>op$r-n4!WU_i%{~yolT;4mAJR#9MkvZzNH_oe8d9@-!lH%kQS>?P0zs}4o|9P zB*t$|DGxvODOdhZ)|(Q8A&F)5S&FSro>O?Q*%`zfVQ^h++`5itaJqv-I#5r2zYn7d z!RW_)?%^4;hz*$fj1*H6HBsES<(^}rb=}NXfld<$-|bR*xijrSD7lInH37>jAqq{{ zAN1JJ_WT5p2+<-?v1=Ol!_uq6r!#DOGtXi$<(tjKUlB<-KI=cJ(!U+J`)p!~uP?q7 z$*N0RJ*@b&hrk3jCQ3%@j@>)$4*=a~yaQ7IKg>9diV#MY4|w2!x&{vnX`A{yn;STW zK7!)`ORU>DW3~1?YQkN5?JYVUBJ?)+FI)Sz-C1N4Hy$W+!QjyMvBd~dRCm-o9yle% zqSkT>EhupfAsBT=gW$XBjKKe5pp^gw`jJ(k{kVJt)?2n|%#8zQabVkr@eJ<_8oU-g zHn7nQLk()G5%$SuvuDqZaSQ|!8Ny}R<7Qmc{j@`~va{lZS3u)UIo;E0YmtrDjJ+_h5uN`RPZ6dH|gPho6 zat60{s(|w|sNenUP4i$j8otJtNvN2mZaA&tC>=H9+N-@Mk{~S=#Ev|IAN;7W-+;s^08U08Pv@`JHF?Q9bj^}Z=UGI+h720pO#qpm6!Ey#!+CSCu8@~~$xCfQ4UFc2e z;#d~sOqM%Gnvy(vXyk{f5~7c}e|dpNi=$jow~m$72$(yNZOtZ`{Tbv}g%D6=1P;1m z-PyNEzhIr{>!BQ*>g7=56}_QtdwfM`?_sv+9z!GZi`ufvu{ZpTsSgkINd6*!X#egE zZdjqny37Cg8^a}BP088=IZ8q6vrWVbqD zndi=+V%%OHUSl37ncK4&BUwy+lXHFaL6>fW?)CROeQeF)cB7lsCW`wpt~OP>?%#{K zSUHdRh{1Il21}lSkQwX(?Fplg#Tj`e9$4IW*&#cJ$iKr8n-G5LPk_~o?fs87j|4_a zY||EdNiL3w3DVFd!ja$V$oUhh+#Q^&sI>%#mm6wh#)l6~&T8JQh<6TFTox{yUbNp4TZ)yUudJ_VKzmk$B9>PXI^Bx{(iGt(c8ovkw zVQ$`z=ToC@a~NQw`o5MJ4>Tzs79Q4fOqJ#*v!t2bIY$Q?(si4RRwY!( zCuZ0Z50rQPR{ajs&b=?R-h2eL!vkGwKkEbvZlb>zXIRPLQu%%)vqH1~E9kD!Lsx+R zIQTSmKi3%Pxp1XQ>dT9&is~ZMf)u^lIukJ6trzihXy4dZQbYel74aiCgFqX`3N;Si zgK^}B&S)|veHV}2hx%}Z;CYXbxPam3-%q6LP(|x9<4HBi9;U7AI#&^I6o*y5gmk;g zeRtA#i-fP;9YbyN4&Z^fp`S^>yjmiSY6V}D*<7=%{Fu`fdfdx(E9l-aMv{F@%V}5) zcDg>$I-**C{yRqNJpHj_Qc{?NEn0lVT?Kah=o3wVP`_~A&uaXP11uw+mX>;-t5QZT z#x4Z1it^RUzvvj4>DumTqsmvb-5D=l-!uDq$mWaj7fW{V;_$?3F?C=?_~i_HyY&^C zeQBik5|zGX{=+^NB-3eUEbQ;=oY-wZr6zZqMxunhCX4)RB z0%Nntc{EH^>;iJ!@Aqf?FSswHK8Wa@6iiKfQT?+pKX(YyR~gA2-hWro-#xH8Aa*D5 z>TW}9hF3W2VTt@d&W%wd15Rr-y!ktm6CQY*R1fLeeiPIAYVHe7+b&#eeFA|Ax1FY$ XFdn_yJvaAcxJC$gi~g4ljGz1)^Q#%% literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Prism3D.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Prism3D.html new file mode 100644 index 000000000..6a5f8f092 --- /dev/null +++ b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Prism3D.html @@ -0,0 +1,436 @@ + + + + + + Main Page + + + + +  + + + + +

    smeshDC.Mesh_Prism3D Class Reference

    Class to define a 3D extrusion algorithm. +More... +

    +Inheritance diagram for smeshDC.Mesh_Prism3D:

    Inheritance graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Public Member Functions

    def __init__
     Private constructor.
    def __init__
    def GetSubMesh
     If the algorithm is global, return 0;
    + else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     smesh
     mesh
     geom
     subm
     algo
    +

    Detailed Description

    +More details. +

    +


    Member Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Prism3D.__init__ (  self,
      mesh,
      geom = 0 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.__init__ (  self,
      smesh 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetSubMesh (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetAlgorithm (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetCompatibleHypothesis (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetName (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.SetName (  self,
      name 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetId (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Create (  self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Hypothesis (  self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    +


    Field Documentation

    + +
    +
    + + + + +
    smeshDC.Mesh_Algorithm.smesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.mesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.geom [inherited]
    +
    +
    + +

    + +

    +Reimplemented in smeshDC.Mesh_Segment. +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.subm [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.algo [inherited]
    +
    +
    + +

    + +

    +

    + +

    + + diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Prism3D__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Prism3D__inherit__graph.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ce49e4499a745ab5f7f600ce5d6fac478b99ed8 GIT binary patch literal 5776 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Projection1D.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Projection1D.html new file mode 100644 index 000000000..f22c1a796 --- /dev/null +++ b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Projection1D.html @@ -0,0 +1,494 @@ + + + + + + Main Page + + + + +  + + + + +

    smeshDC.Mesh_Projection1D Class Reference

    Class to define a projection 1D algorithm. +More... +

    +Inheritance diagram for smeshDC.Mesh_Projection1D:

    Inheritance graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Public Member Functions

    def __init__
     Private constructor.
    def SourceEdge
     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).
    def __init__
    def GetSubMesh
     If the algorithm is global, return 0;
    + else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     smesh
     mesh
     geom
     subm
     algo
    +

    Detailed Description

    +More details. +

    +


    Member Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Projection1D.__init__ (  self,
      mesh,
      geom = 0 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Projection1D.SourceEdge (  self,
      edge,
      mesh = None,
      srcV = None,
      tgtV = None 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + + +
    edge to take nodes distribution from
    mesh to take nodes distribution from (optional)
    srcV is vertex of edge to associate with tgtV (optional)
    tgtV is vertex of the edge where the algorithm is assigned, to associate with srcV (optional)
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.__init__ (  self,
      smesh 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetSubMesh (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetAlgorithm (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetCompatibleHypothesis (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetName (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.SetName (  self,
      name 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetId (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Create (  self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Hypothesis (  self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    +


    Field Documentation

    + +
    +
    + + + + +
    smeshDC.Mesh_Algorithm.smesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.mesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.geom [inherited]
    +
    +
    + +

    + +

    +Reimplemented in smeshDC.Mesh_Segment. +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.subm [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.algo [inherited]
    +
    +
    + +

    + +

    +

    + +

    + + diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Projection1D__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Projection1D__inherit__graph.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b9b51679158b43607603952b5b1986da48715dca GIT binary patch literal 6163 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 HfMfp#3D&|@ literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Projection2D.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Projection2D.html new file mode 100644 index 000000000..fc2d896d4 --- /dev/null +++ b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Projection2D.html @@ -0,0 +1,508 @@ + + + + + + Main Page + + + + +  + + + + +

    smeshDC.Mesh_Projection2D Class Reference

    Class to define a projection 2D algorithm. +More... +

    +Inheritance diagram for smeshDC.Mesh_Projection2D:

    Inheritance graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Public Member Functions

    def __init__
     Private constructor.
    def SourceFace
     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).
    def __init__
    def GetSubMesh
     If the algorithm is global, return 0;
    + else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     smesh
     mesh
     geom
     subm
     algo
    +

    Detailed Description

    +More details. +

    +


    Member Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Projection2D.__init__ (  self,
      mesh,
      geom = 0 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Projection2D.SourceFace (  self,
      face,
      mesh = None,
      srcV1 = None,
      tgtV1 = None,
      srcV2 = None,
      tgtV2 = None 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + + + + +
    face to take mesh pattern from
    mesh to take mesh pattern from (optional)
    srcV1 is vertex of face to associate with tgtV1 (optional)
    tgtV1 is vertex of the face where the algorithm is assigned, to associate with srcV1 (optional)
    srcV2 is vertex of face to associate with tgtV1 (optional)
    tgtV2 is vertex of the face where the algorithm is assigned, to associate with srcV2 (optional)
    +
    +Note: association vertices must belong to one edge of a face +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.__init__ (  self,
      smesh 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetSubMesh (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetAlgorithm (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetCompatibleHypothesis (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetName (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.SetName (  self,
      name 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetId (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Create (  self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Hypothesis (  self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    +


    Field Documentation

    + +
    +
    + + + + +
    smeshDC.Mesh_Algorithm.smesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.mesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.geom [inherited]
    +
    +
    + +

    + +

    +Reimplemented in smeshDC.Mesh_Segment. +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.subm [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.algo [inherited]
    +
    +
    + +

    + +

    +

    + +

    + + diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Projection2D__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Projection2D__inherit__graph.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac89989bb22df387910cadae49fd3b0993495767 GIT binary patch literal 6163 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 T+hLiF7~tDK4#@u99y|FrDSF$e literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Projection3D.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Projection3D.html new file mode 100644 index 000000000..15e2112b0 --- /dev/null +++ b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Projection3D.html @@ -0,0 +1,508 @@ + + + + + + Main Page + + + + +  + + + + +

    smeshDC.Mesh_Projection3D Class Reference

    Class to define a projection 3D algorithm. +More... +

    +Inheritance diagram for smeshDC.Mesh_Projection3D:

    Inheritance graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Public Member Functions

    def __init__
     Private constructor.
    def SourceShape3D
     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).
    def __init__
    def GetSubMesh
     If the algorithm is global, return 0;
    + else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     smesh
     mesh
     geom
     subm
     algo
    +

    Detailed Description

    +More details. +

    +


    Member Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Projection3D.__init__ (  self,
      mesh,
      geom = 0 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Projection3D.SourceShape3D (  self,
      solid,
      mesh = 0,
      srcV1 = 0,
      tgtV1 = 0,
      srcV2 = 0,
      tgtV2 = 0 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + + + + +
    solid to take mesh pattern from
    mesh to take mesh pattern from (optional)
    srcV1 is vertex of solid to associate with tgtV1 (optional)
    tgtV1 is vertex of the solid where the algorithm is assigned, to associate with srcV1 (optional)
    srcV2 is vertex of solid to associate with tgtV1 (optional)
    tgtV2 is vertex of the solid where the algorithm is assigned, to associate with srcV2 (optional)
    +
    +Note: association vertices must belong to one edge of a solid +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.__init__ (  self,
      smesh 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetSubMesh (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetAlgorithm (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetCompatibleHypothesis (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetName (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.SetName (  self,
      name 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetId (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Create (  self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Hypothesis (  self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    +


    Field Documentation

    + +
    +
    + + + + +
    smeshDC.Mesh_Algorithm.smesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.mesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.geom [inherited]
    +
    +
    + +

    + +

    +Reimplemented in smeshDC.Mesh_Segment. +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.subm [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.algo [inherited]
    +
    +
    + +

    + +

    +

    + +

    + + diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Projection3D__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Projection3D__inherit__graph.jpg new file mode 100644 index 0000000000000000000000000000000000000000..073664314d4df200572d96c4672fd6df7f457cc2 GIT binary patch literal 6163 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Quadrangle.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Quadrangle.html new file mode 100644 index 000000000..f79cf6885 --- /dev/null +++ b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Quadrangle.html @@ -0,0 +1,459 @@ + + + + + + Main Page + + + + +  + + + + +

    smeshDC.Mesh_Quadrangle Class Reference

    Class to define a quadrangle 2D algorithm. +More... +

    +Inheritance diagram for smeshDC.Mesh_Quadrangle:

    Inheritance graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Public Member Functions

    def __init__
     Private constructor.
    def QuadranglePreference
     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 __init__
    def GetSubMesh
     If the algorithm is global, return 0;
    + else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     smesh
     mesh
     geom
     subm
     algo
    +

    Detailed Description

    +More details. +

    +


    Member Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Quadrangle.__init__ (  self,
      mesh,
      geom = 0 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Quadrangle.QuadranglePreference (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.__init__ (  self,
      smesh 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetSubMesh (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetAlgorithm (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetCompatibleHypothesis (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetName (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.SetName (  self,
      name 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetId (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Create (  self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Hypothesis (  self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    +


    Field Documentation

    + +
    +
    + + + + +
    smeshDC.Mesh_Algorithm.smesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.mesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.geom [inherited]
    +
    +
    + +

    + +

    +Reimplemented in smeshDC.Mesh_Segment. +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.subm [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.algo [inherited]
    +
    +
    + +

    + +

    +

    + +

    + + diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Quadrangle__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Quadrangle__inherit__graph.jpg new file mode 100644 index 0000000000000000000000000000000000000000..531a33969bf45f9f95e5b1f2545a43cbff85b72a GIT binary patch literal 6049 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__RadialPrism3D.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__RadialPrism3D.html new file mode 100644 index 000000000..2b10bc4de --- /dev/null +++ b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__RadialPrism3D.html @@ -0,0 +1,775 @@ + + + + + + Main Page + + + + +  + + + + +

    smeshDC.Mesh_RadialPrism3D Class Reference

    Class to define a Radial Prism 3D algorithm. +More... +

    +Inheritance diagram for smeshDC.Mesh_RadialPrism3D:

    Inheritance graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Public Member Functions

    def __init__
     Private constructor.
    def Get3DHypothesis
     Return 3D hypothesis holding the 1D one.
    def OwnHypothesis
     Private method creating 1D hypothes and storing it in the LayerDistribution hypothes.
    def NumberOfLayers
     Define "NumberOfLayers" hypothesis, specifying a number of layers of prisms to build between the inner and outer shells.
    def LocalLength
     Define "LocalLength" hypothesis, specifying segment length to build between the inner and outer shells.
    def NumberOfSegments
     Define "NumberOfSegments" hypothesis, specifying a number of layers of prisms to build between the inner and outer shells.
    def Arithmetic1D
     Define "Arithmetic1D" hypothesis, specifying distribution of segments to build between the inner and outer shells as arithmetic length increasing.
    def StartEndLength
     Define "StartEndLength" hypothesis, specifying distribution of segments to build between the inner and outer shells as geometric length increasing.
    def AutomaticLength
     Define "AutomaticLength" hypothesis, specifying number of segments to build between the inner and outer shells.
    def __init__
    def GetSubMesh
     If the algorithm is global, return 0;
    + else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     distribHyp
     nbLayers
     smesh
     mesh
     geom
     subm
     algo
    +

    Detailed Description

    +More details. +

    +


    Member Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_RadialPrism3D.__init__ (  self,
      mesh,
      geom = 0 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_RadialPrism3D.Get3DHypothesis (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_RadialPrism3D.OwnHypothesis (  self,
      hypType,
      args = [],
      so = "libStdMeshersEngine.so" 
    )
    +
    +
    + +

    +Returns the created hypothes +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_RadialPrism3D.NumberOfLayers (  self,
      n 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_RadialPrism3D.LocalLength (  self,
      l 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    l for the length of segments
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_RadialPrism3D.NumberOfSegments (  self,
      n,
      s = [] 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    n for the number of segments
    s for the scale factor (optional)
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_RadialPrism3D.Arithmetic1D (  self,
      start,
      end 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    start for the length of the first segment
    end for the length of the last segment
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_RadialPrism3D.StartEndLength (  self,
      start,
      end 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    start for the length of the first segment
    end for the length of the last segment
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_RadialPrism3D.AutomaticLength (  self,
      fineness = 0 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    fineness for the fineness [0-1]
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.__init__ (  self,
      smesh 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetSubMesh (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetAlgorithm (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetCompatibleHypothesis (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetName (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.SetName (  self,
      name 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetId (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Create (  self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Hypothesis (  self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    +


    Field Documentation

    + +
    + +
    + +

    + +

    +

    + +

    + +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.smesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.mesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.geom [inherited]
    +
    +
    + +

    + +

    +Reimplemented in smeshDC.Mesh_Segment. +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.subm [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.algo [inherited]
    +
    +
    + +

    + +

    +

    + +

    + + diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__RadialPrism3D__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__RadialPrism3D__inherit__graph.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3624c762b313408673a298f25ef3df02fc999cf8 GIT binary patch literal 6343 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 + + + + + Main Page + + + + +  + + + + +

    smeshDC.Mesh_Segment Class Reference

    Class to define a segment 1D algorithm for discretization. +More... +

    +Inheritance diagram for smeshDC.Mesh_Segment:

    Inheritance graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Public Member Functions

    def __init__
     Private constructor.
    def LocalLength
     Define "LocalLength" hypothesis to cut an edge in several segments with the same length.
    def NumberOfSegments
     Define "NumberOfSegments" hypothesis to cut an edge in several fixed number of segments.
    def Arithmetic1D
     Define "Arithmetic1D" hypothesis to cut an edge in several segments with arithmetic length increasing.
    def StartEndLength
     Define "StartEndLength" hypothesis to cut an edge in several segments with geometric length increasing.
    def Deflection1D
     Define "Deflection1D" hypothesis.
    def Propagation
     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 AutomaticLength
     Define "AutomaticLength" hypothesis.
    def LengthNearVertex
     Define "SegmentLengthAroundVertex" hypothesis.
    def QuadraticMesh
     Define "QuadraticMesh" hypothesis, forcing construction of quadratic edges.
    def __init__
    def GetSubMesh
     If the algorithm is global, return 0;
    + else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     geom
     smesh
     mesh
     subm
     algo
    +

    Detailed Description

    +More details. +

    +


    Member Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment.__init__ (  self,
      mesh,
      geom = 0 
    )
    +
    + +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment.LocalLength (  self,
      l 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    l for the length of segments that cut an edge
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment.NumberOfSegments (  self,
      n,
      s = [] 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    n for the number of segments that cut an edge
    s for the scale factor (optional)
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment.Arithmetic1D (  self,
      start,
      end 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    start for the length of the first segment
    end for the length of the last segment
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment.StartEndLength (  self,
      start,
      end 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    start for the length of the first segment
    end for the length of the last segment
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment.Deflection1D (  self,
      d 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    d for the deflection
    +
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Segment.Propagation (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment.AutomaticLength (  self,
      fineness = 0 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    fineness for the fineness [0-1]
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment.LengthNearVertex (  self,
      length,
      vertex = 0 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    length for the segment length
    vertex for the length localization: vertex index [0,1] | verext object
    +
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Segment.QuadraticMesh (  self  ) 
    +
    +
    + +

    +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 smeshDC.Mesh_Algorithm.__init__ (  self,
      smesh 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetSubMesh (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetAlgorithm (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetCompatibleHypothesis (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetName (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.SetName (  self,
      name 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetId (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Create (  self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Hypothesis (  self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    +


    Field Documentation

    + +
    + +
    + +

    + +

    +Reimplemented from smeshDC.Mesh_Algorithm. +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.smesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.mesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.subm [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.algo [inherited]
    +
    +
    + +

    + +

    +

    + +

    + + diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Segment__Python.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Segment__Python.html new file mode 100644 index 000000000..81b2c0e57 --- /dev/null +++ b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Segment__Python.html @@ -0,0 +1,816 @@ + + + + + + Main Page + + + + +  + + + + +

    smeshDC.Mesh_Segment_Python Class Reference

    Class to define a segment 1D algorithm for discretization with python function. +More... +

    +Inheritance diagram for smeshDC.Mesh_Segment_Python:

    Inheritance graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Public Member Functions

    def __init__
     Private constructor.
    def PythonSplit1D
     Define "PythonSplit1D" hypothesis based on the Erwan Adam patch, awaiting equivalent SALOME functionality.
    def __init__
    def LocalLength
     Define "LocalLength" hypothesis to cut an edge in several segments with the same length.
    def NumberOfSegments
     Define "NumberOfSegments" hypothesis to cut an edge in several fixed number of segments.
    def Arithmetic1D
     Define "Arithmetic1D" hypothesis to cut an edge in several segments with arithmetic length increasing.
    def StartEndLength
     Define "StartEndLength" hypothesis to cut an edge in several segments with geometric length increasing.
    def Deflection1D
     Define "Deflection1D" hypothesis.
    def Propagation
     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 AutomaticLength
     Define "AutomaticLength" hypothesis.
    def LengthNearVertex
     Define "SegmentLengthAroundVertex" hypothesis.
    def QuadraticMesh
     Define "QuadraticMesh" hypothesis, forcing construction of quadratic edges.
    def GetSubMesh
     If the algorithm is global, return 0;
    + else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     geom
     smesh
     mesh
     subm
     algo
    +

    Detailed Description

    +More details. +

    +


    Member Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment_Python.__init__ (  self,
      mesh,
      geom = 0 
    )
    +
    +
    + +

    + +

    +Reimplemented from smeshDC.Mesh_Segment. +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment_Python.PythonSplit1D (  self,
      n,
      func 
    )
    +
    +
    + +

    +

    Parameters:
    + + + +
    n for the number of segments that cut an edge
    func for the python function that calculate the length of all segments
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.__init__ (  self,
      smesh 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment.LocalLength (  self,
      l 
    ) [inherited]
    +
    +
    + +

    +

    Parameters:
    + + +
    l for the length of segments that cut an edge
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment.NumberOfSegments (  self,
      n,
      s = [] 
    ) [inherited]
    +
    +
    + +

    +

    Parameters:
    + + + +
    n for the number of segments that cut an edge
    s for the scale factor (optional)
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment.Arithmetic1D (  self,
      start,
      end 
    ) [inherited]
    +
    +
    + +

    +

    Parameters:
    + + + +
    start for the length of the first segment
    end for the length of the last segment
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment.StartEndLength (  self,
      start,
      end 
    ) [inherited]
    +
    +
    + +

    +

    Parameters:
    + + + +
    start for the length of the first segment
    end for the length of the last segment
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment.Deflection1D (  self,
      d 
    ) [inherited]
    +
    +
    + +

    +

    Parameters:
    + + +
    d for the deflection
    +
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Segment.Propagation (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment.AutomaticLength (  self,
      fineness = 0 
    ) [inherited]
    +
    +
    + +

    +

    Parameters:
    + + +
    fineness for the fineness [0-1]
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Segment.LengthNearVertex (  self,
      length,
      vertex = 0 
    ) [inherited]
    +
    +
    + +

    +

    Parameters:
    + + + +
    length for the segment length
    vertex for the length localization: vertex index [0,1] | verext object
    +
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Segment.QuadraticMesh (  self  )  [inherited]
    +
    +
    + +

    +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 smeshDC.Mesh_Algorithm.GetSubMesh (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetAlgorithm (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetCompatibleHypothesis (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetName (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.SetName (  self,
      name 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetId (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Create (  self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Hypothesis (  self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    +


    Field Documentation

    + +
    +
    + + + + +
    smeshDC.Mesh_Segment.geom [inherited]
    +
    +
    + +

    + +

    +Reimplemented from smeshDC.Mesh_Algorithm. +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.smesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.mesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.subm [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.algo [inherited]
    +
    +
    + +

    + +

    +

    + +

    + + diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Segment__Python__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Segment__Python__inherit__graph.jpg new file mode 100644 index 0000000000000000000000000000000000000000..22c0b79aff9f2e674de9c676ea3b79923faba353 GIT binary patch literal 9145 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Tetrahedron.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Tetrahedron.html new file mode 100644 index 000000000..a85de467c --- /dev/null +++ b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Tetrahedron.html @@ -0,0 +1,800 @@ + + + + + + Main Page + + + + +  + + + + +

    smeshDC.Mesh_Tetrahedron Class Reference

    Class to define a tetrahedron 3D algorithm. +More... +

    +Inheritance diagram for smeshDC.Mesh_Tetrahedron:

    Inheritance graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Public Member Functions

    def __init__
     Private constructor.
    def MaxElementVolume
     Define "MaxElementVolume" hypothesis to give the maximun volume of each tetrahedral.
    def Parameters
     Define "Netgen 3D Parameters" hypothesis.
    def SetMaxSize
     Set MaxSize.
    def SetSecondOrder
     Set SecondOrder flag.
    def SetOptimize
     Set Optimize flag.
    def SetFineness
     Set Fineness.
    def SetGrowthRate
     Set GrowthRate.
    def SetNbSegPerEdge
     Set NbSegPerEdge.
    def SetNbSegPerRadius
     Set NbSegPerRadius.
    def __init__
    def GetSubMesh
     If the algorithm is global, return 0;
    + else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     algoType
     params
     smesh
     mesh
     geom
     subm
     algo

    Static Public Attributes

    int params = 0
    int algoType = 0
    +

    Detailed Description

    +More details. +

    +


    Member Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Tetrahedron.__init__ (  self,
      mesh,
      algoType,
      geom = 0 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Tetrahedron.MaxElementVolume (  self,
      vol 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    vol for the maximum volume of each tetrahedral
    +
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Tetrahedron.Parameters (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Tetrahedron.SetMaxSize (  self,
      theSize 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Tetrahedron.SetSecondOrder (  self,
      theVal 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Tetrahedron.SetOptimize (  self,
      theVal 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Tetrahedron.SetFineness (  self,
      theFineness 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    theFineness is: VeryCoarse, Coarse, Moderate, Fine, VeryFine or Custom
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Tetrahedron.SetGrowthRate (  self,
      theRate 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Tetrahedron.SetNbSegPerEdge (  self,
      theVal 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Tetrahedron.SetNbSegPerRadius (  self,
      theVal 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.__init__ (  self,
      smesh 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetSubMesh (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetAlgorithm (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetCompatibleHypothesis (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetName (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.SetName (  self,
      name 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetId (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Create (  self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Hypothesis (  self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    +


    Field Documentation

    + +
    +
    + + + + +
    int smeshDC.Mesh_Tetrahedron.params = 0 [static]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    int smeshDC.Mesh_Tetrahedron.algoType = 0 [static]
    +
    +
    + +

    + +

    +

    + +

    + +
    + +

    + +

    +

    + +

    + +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.smesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.mesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.geom [inherited]
    +
    +
    + +

    + +

    +Reimplemented in smeshDC.Mesh_Segment. +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.subm [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.algo [inherited]
    +
    +
    + +

    + +

    +

    + +

    + + diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Tetrahedron__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Tetrahedron__inherit__graph.jpg new file mode 100644 index 0000000000000000000000000000000000000000..04b52203194d2e0c8c6f742b2de33578d616291e GIT binary patch literal 6069 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 + + + + + Main Page + + + + +  + + + + +

    smeshDC.Mesh_Triangle Class Reference

    Class to define a triangle 2D algorithm. +More... +

    +Inheritance diagram for smeshDC.Mesh_Triangle:

    Inheritance graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Public Member Functions

    def __init__
     Private constructor.
    def MaxElementArea
     Define "MaxElementArea" hypothesis to give the maximun area of each triangles.
    def LengthFromEdges
     Define "LengthFromEdges" hypothesis to build triangles based on the length of the edges taken from the wire.
    def Parameters
     Define "Netgen 2D Parameters" hypothesis.
    def SetMaxSize
     Set MaxSize.
    def SetSecondOrder
     Set SecondOrder flag.
    def SetOptimize
     Set Optimize flag.
    def SetFineness
     Set Fineness.
    def SetGrowthRate
     Set GrowthRate.
    def SetNbSegPerEdge
     Set NbSegPerEdge.
    def SetNbSegPerRadius
     Set NbSegPerRadius.
    def SetQuadAllowed
     Set QuadAllowed flag.
    def __init__
    def GetSubMesh
     If the algorithm is global, return 0;
    + else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     algoType
     params
     smesh
     mesh
     geom
     subm
     algo

    Static Public Attributes

    int algoType = 0
    int params = 0
    +

    Detailed Description

    +More details. +

    +


    Member Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Triangle.__init__ (  self,
      mesh,
      algoType,
      geom = 0 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Triangle.MaxElementArea (  self,
      area 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    area for the maximum area of each triangles
    +
    + +
    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Triangle.LengthFromEdges (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Triangle.Parameters (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Triangle.SetMaxSize (  self,
      theSize 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Triangle.SetSecondOrder (  self,
      theVal 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Triangle.SetOptimize (  self,
      theVal 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Triangle.SetFineness (  self,
      theFineness 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    theFineness is: VeryCoarse, Coarse, Moderate, Fine, VeryFine or Custom
    +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Triangle.SetGrowthRate (  self,
      theRate 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Triangle.SetNbSegPerEdge (  self,
      theVal 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Triangle.SetNbSegPerRadius (  self,
      theVal 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Triangle.SetQuadAllowed (  self,
      toAllow 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.__init__ (  self,
      smesh 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetSubMesh (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetAlgorithm (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetCompatibleHypothesis (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetName (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.SetName (  self,
      name 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.GetId (  self  )  [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Create (  self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.Mesh_Algorithm.Hypothesis (  self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so" 
    ) [inherited]
    +
    +
    + +

    + +

    +

    +


    Field Documentation

    + +
    +
    + + + + +
    int smeshDC.Mesh_Triangle.algoType = 0 [static]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    int smeshDC.Mesh_Triangle.params = 0 [static]
    +
    +
    + +

    + +

    +

    + +

    + +
    + +

    + +

    +

    + +

    + +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.smesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.mesh [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.geom [inherited]
    +
    +
    + +

    + +

    +Reimplemented in smeshDC.Mesh_Segment. +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.subm [inherited]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.Mesh_Algorithm.algo [inherited]
    +
    +
    + +

    + +

    +

    + +

    + + diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Triangle__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1Mesh__Triangle__inherit__graph.jpg new file mode 100644 index 0000000000000000000000000000000000000000..654d53760b38bb14507150353f82d5de3002b8d6 GIT binary patch literal 5752 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 + + + + + Main Page + + + + +  + + + + +

    smeshDC.smeshDC Class Reference

    Inheritance diagram for smeshDC.smeshDC:

    Inheritance graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Public Member Functions

    def init_smesh
    def Mesh
    def EnumToLong
     Returns long value from enumeration Uses for SMESH.FunctorType enumeration.
    def GetPointStruct
     Get PointStruct from vertex.
    def GetDirStruct
     Get DirStruct from vector.
    def GetAxisStruct
     Get AxisStruct from object.
    def SetEmbeddedMode
     Set the current mode.
    def IsEmbeddedMode
     Get the current mode.
    def SetCurrentStudy
     Set the current study.
    def GetCurrentStudy
     Get the current study.
    def CreateMeshesFromUNV
     Create Mesh object importing data from given UNV file.
    def CreateMeshesFromMED
     Create Mesh object(s) importing data from given MED file.
    def CreateMeshesFromSTL
     Create Mesh object importing data from given STL file.
    def GetSubShapesId
     From SMESH_Gen interface.
    def GetPattern
     From SMESH_Gen interface.
    def GetEmptyCriterion
     Creates an empty criterion.
    def GetCriterion
     Creates a criterion by given parameters.
    def GetFilter
     Creates filter by given parameters of criterion.
    def GetFunctor
     Creates numerical functor by its type.

    Data Fields

     geompyD
    +

    Member Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.smeshDC.init_smesh (  self,
      theStudy,
      geompyD 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.smeshDC.Mesh (  self,
      obj = 0,
      name = 0 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.smeshDC.EnumToLong (  self,
      theItem 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.smeshDC.GetPointStruct (  self,
      theVertex 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    theVertex is GEOM object(vertex)
    +
    +
    Returns:
    SMESH.PointStruct
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.smeshDC.GetDirStruct (  self,
      theVector 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    theVector is GEOM object(vector)
    +
    +
    Returns:
    SMESH.DirStruct
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.smeshDC.GetAxisStruct (  self,
      theObj 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    theObj is GEOM object(line or plane)
    +
    +
    Returns:
    SMESH.AxisStruct
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.smeshDC.SetEmbeddedMode (  self,
      theMode 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.smeshDC.IsEmbeddedMode (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.smeshDC.SetCurrentStudy (  self,
      theStudy 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.smeshDC.GetCurrentStudy (  self  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.smeshDC.CreateMeshesFromUNV (  self,
      theFileName 
    )
    +
    +
    + +

    +

    Returns:
    an instance of Mesh class
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.smeshDC.CreateMeshesFromMED (  self,
      theFileName 
    )
    +
    +
    + +

    +

    Returns:
    a list of Mesh class instances
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.smeshDC.CreateMeshesFromSTL (  self,
      theFileName 
    )
    +
    +
    + +

    +

    Returns:
    an instance of Mesh class
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.smeshDC.GetSubShapesId (  self,
      theMainObject,
      theListOfSubObjects 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.smeshDC.GetPattern (  self  ) 
    +
    +
    + +

    +Creates pattern +

    +

    + +

    +
    + + + + + + + + + +
    def smeshDC.smeshDC.GetEmptyCriterion (  self  ) 
    +
    +
    + +

    +

    Returns:
    SMESH.Filter.Criterion
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.smeshDC.GetCriterion (  self,
      elementType,
      CritType,
      Compare = FT_EqualTo,
      Treshold = "",
      UnaryOp = FT_Undefined,
      BinaryOp = FT_Undefined 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + + + + +
    elementType is the type of elements(NODE, EDGE, FACE, VOLUME)
    CritType is type of criterion( FT_Taper, FT_Area, FT_RangeOfIds, FT_LyingOnGeom etc. )
    Compare belong to {FT_LessThan, FT_MoreThan, FT_EqualTo}
    Treshold is threshold value (range of ids as string, shape, numeric)
    UnaryOp is FT_LogicalNOT or FT_Undefined
    BinaryOp is binary logical operation FT_LogicalAND, FT_LogicalOR or FT_Undefined(must be for the last criterion in criteria)
    +
    +
    Returns:
    SMESH.Filter.Criterion
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.smeshDC.GetFilter (  self,
      elementType,
      CritType = FT_Undefined,
      Compare = FT_EqualTo,
      Treshold = "",
      UnaryOp = FT_Undefined 
    )
    +
    +
    + +

    +

    Parameters:
    + + + + + + +
    elementType is the type of elements in the group
    CritType is type of criterion( FT_Taper, FT_Area, FT_RangeOfIds, FT_LyingOnGeom etc. )
    Compare belong to {FT_LessThan, FT_MoreThan, FT_EqualTo}
    Treshold is threshold value (range of id ids as string, shape, numeric)
    UnaryOp is FT_LogicalNOT or FT_Undefined
    +
    +
    Returns:
    SMESH_Filter
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.smeshDC.GetFunctor (  self,
      theCriterion 
    )
    +
    +
    + +

    +

    Parameters:
    + + +
    theCrierion is FT_...; functor type
    +
    +
    Returns:
    SMESH_NumericalFunctor
    + +
    +

    +


    Field Documentation

    + +
    + +
    + +

    + +

    +

    + +

    + + diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1smeshDC__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmeshDC_1_1smeshDC__inherit__graph.jpg new file mode 100644 index 0000000000000000000000000000000000000000..879ced85259b8a5826590ab17bc56eb10983ef51 GIT binary patch literal 5548 zcmeHKXIK;6x}6vxNK=qrq)U({MUW;Uok$TW0tup^^dP+{U{Dl9kf4BofFK|rMG**w zB1LH;9VtN|G-+SxEeM$#zjMo@=Q*Bx&aeC9?s?w%F|+4=_gZW3S$l)SAQ3oftZ$?b zKp+4BpF8i|wDd3-?C@cF1}1i9CPqdk9=2mg*adh6 zj|=ef^9zZ|N(hNai}LfsRV1ZP$tx)-2}-DHo>9<{Ra8>=kpy!1@L?uKCT?bCZUtd} zVTFIWfeipFJ>U;aKp`T)Ayx>K6#{+)1gSV_A%8XCKO5u_l!lfLMt_)rk=mj1C~yb@ zg&v}T($dnFDa|8yFfHU$V5awz+I;=R_sT#nsK-&p#kAC^#fE>h8Vh z`wwDbu}M#!Ca0u6OUuc9nU`Pis_>7uI@X9wAIl zP0!4Jo10%)TwCAR+}hsRCGY*f1p%OcgGIgn4cITZSgE)U(a=C?U_Wp{4h2yI%1T2k zEKkR#eGzum=a`7X9eVcji7(0;4~r^Vta4oQ?PcH;Q<@ZC`vL7QWdA#0n12h|e*^m; zTm*m#3ZaSzWd*c=ojrJ|U{g3>#lSw_i;3|o9#|C0ZF}Pa2#lsg`Bk`ICL-=&&5VI% zcxeRX=$ITOys~@$_&5lxEox0N_kqCN5)uR&Nh=_5Jevg*I|l;4KF+i_7*T5P!KO6q|5^E-w)a45G#e=}1h<1(Dp#w}w#HPiNHdXLD zS~Ho!9+XDw`aMZks9du(A#Dk>ZI80v(L6$flA_QGFLcn7Zb{&~7iZEIX4_tKYJ zb5Eg|B|dT=**SkQQ&niYZM=H*eL|Rb5Y1qpXH5-aBrb?eza@a4#L4TWtdJB6L+zP~hw@w{@Eav^$iwYnVO^A~Y}$DJQfT&Z1Q zvD((~WK3z4VoGjuaf2}tXy zU4$M=0R+rEY{jF@&16aW_++CKNGE1d`S82bnTpM>$c4d_lt7zH&F?)VdF=zg>bE#M zO8~_E;tv^H*^rm@64OgLVTsI=D>q!L*BN6ULOz#K!9^ z=R^vgJZIY_>nx~1Y7kUmT#w5po2kMiRLjSL3(?~CxB2w3z>NO7dta`?9LCcAD2uxD z^gs_x%W10a#|%a4A4Y8s4`Um2{nmpkm5cDp^3(D@WsEmE~j-qD>i)$#udkRlHaRCmV*NTFOTtNM$tzeCAho(>D%tVzFLEzU74 zU4}^%C)!Y5n@to#7g9eL~j9 z56spT&%;-cYagrg>PS6(vK1b=E@;$KdG^P0>E-zcEAVbqwjZkUb+mt&qHB+xSD4ZG zHwiaXdZ$0U>$8!paT$*%1yf>@H-dDRijY<>O&%jfEsL_^Ejr?+u@Ac);Lw=e&~mf9 z`Jf?QmzZ1RVi7E2sT0}hEvn?0y#A;|Ff}7#EYA66T}I9dVvQ?(N^DTxr_i&a9yfp_ zkV52{%z&F*m{&$RNf}kA`xef!_iY+P4lC!x918K#IZ@yzZJ6x{;cK%2{HNmwiY842 zyazWM)!VS-c`WMln%J|h*_hO9Rn<0jNCRp&-TvVux^|(!!vewQE_~V&fA=KqyC;$~ zpT!~P7@KCih)x_!r<2D8`qIzidznl9m$Fnk?|=4A@4OL2E>BFpp>bTX<)r#j7Mnqc z$grE8<#sNgSk@)11e(q_hYp$n0<2rpdBD}D>Bym5dfP>hj14Oab1|c){mX=rtWz)3 zJEUG*Yi{F9g^zBXeh5oIJBYpMovLT{@?2LPP$I8<3p$248uO@3SoL1Zw#;J#<|tH2 z_kGU*BjNY;IFH+iPgcqHeC^lJsw3a@FFx0n;DOF7UaXI*P-L#XNa#QdS?h+`7dra# zRGo6sXBxR?^wrcz0-w#KyCxBH+C+buk6zl7Z30nQ@47-voV9skc;Nz6R=%94m0N>< zZD8Imb+A?|e=$c3?m%evo1Ie+%Jy^_RnpGAY>z~mvC|-YXaf7n5@TGa$KLpcd80!! zHqtViS|%>^mlR7+uams48D2H{NYVq~?K4EkV5GE-7SW6>k;w}JZ>(NZV(sRovQ{Pb zle(EBhEEQGfSwHC&(Sd)e17Gx4Ev~30}l^29fpuV7k4;B-{ie1AmH&TCsGvzb`2`c z_V~BDzi(Uzfws+vCe1%0dge+aCer072Bnx-;Kxqn_!q5tzag!a&J++3?F9k)?LrXH z$)q}3xMw~2cr^nYngs%P!z@AIMK{&f>XonTCm8ID5(*AjLgx<1Z$V%tbRM3~5r;V4dD#*KTjfYaWk- z3q+DH`QV6UP4TsfgEhPxN8&>X!@;teGPW8dPHQL==E03)U~f}`utn$ zx?_nR4MCv^ar-hXuWq4=n|%dd;A78tZohoEkdD5~fiB=H!)lkN{EQ<6){wwjl8Fz= zHeJCT=u&H*6g!6i-ZejFq zKjyF37qclxOf0+*$ccsjD*-*$n6)ml8$oHrP3%c}pvyFPKtM$9J_!8D=LG^e$+*RW zwNu)9?3R%i_1J-b5RlH@54Hmp5Bw|o2)z<@b>G!B2V_qE@!)!ruvO2T{GB0uu@Ua5VfB2xP}oD`W8WVTyU&DmNr81R0v_-UO)jq6})f`|w$EWrC zw6?EbyA`>3`P+>>1Jv zyb&9Zz_TmiMtT;Ovc1@dx-Q99`#SuWZ{>Y|mdIXP{{DuqcLR?xqM-z+2QTGfthDm zN)tU7dKSx=1n&yv&v_iSDLNi0-tVnpmFE_i7VthVSBdkn80#~ob_9nNgMwZI4Kb9V z@}O$^$R7QC#I9622w*)_w>oGBOdf<}1_T(am%Q}X_dLq;#kjB$hE5TFXm}D?+A{)+o7wJis|pIF8`_?T)0!830RqHQZ;DawckdR#P1YXj`ms>~ z0kJ`g-~>dlcuIHTt*Xle35;Hf-|ZezsdsZY*qO6W3O=eizD3k)e$vS2(7X3JUpu29 znJb(K5pz1j9y#!PavIZ{t#7(>CX+Z?pZa-Aw~gy&-k1qMWm@=(H`kb zQeM0S!Yaz%$X7gV_J#SYPcMD=_-FTy%152!qn<>6KOw!QbgOW6Dmbi8z>VG_`&^g; z4~ytiU0>4>?HG95EW{H74Kp|(>j@Lq`OJqA`F(C|=; zqIHfxxnvS$K@OnzY|e{Qk?$%k43ZL?ZESS?M2cHhk3nL?D|?Od+r}j-2kyjaGiTst zL&or#$}~()+&U9|C8Raj0fX9W3XLuGgubV|8%4P%KppBKX{uo!0KO%Yd>=8NtP;iW zIP8ji-pt^q1*I14?`_^2-27@eZp!*xUdFL@ z=14=1-rrYn9(El{-l?kMQeo}d;pE&NcM(q0WkX++ZxC;s9xvZ~#D(k`SM+9i?#uGr z&6RS!zqNAGh9*vb1QsEnW@A$IQE(H!Sij5a0s^h`qfI9 zZ)tF0sg*NgKm5@zjB}^ho!-wBLUia>Rp=;a46%+GRXcOj+6mMg7IN}Yg|dHK zo$Z_F9Hb>~IDMg=&Ul`8cHnxeX^rXGy0uPkuip~x7utOf9Uy@AGFE-;^RxXYeazvL)IJ?=V)3>o;Q7h*zD0sMV{(j~s6Tdg ziaU*H{F0T=1#paGG4UV$C){{Xjus8CEX&D?#8MWB!JmcRYR}+yThGXBI48CE^;kd6 zUGlz(S!X^Aw-g{Tb&G28JF=VCey`g4XRLEd=`>tf(m;T~RqEXDL%6s8gmtTq7$$JO tPvC}^fmw2M>DCc7cs^Fy3q$YJzCIF3PORyHS^dVQe`n$U^$rG({0GD7qSgQa literal 0 HcmV?d00001 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 index 51edc45d3..000000000 --- a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh.html +++ /dev/null @@ -1,7910 +0,0 @@ - - - - - - Main Page - - - - -  - - - - -

    smesh.Mesh Class Reference

    Class to define a mesh. -More... -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Public Member Functions

    def __init__
     Constructor.
    def SetMesh
     Method that inits the Mesh object from SMESH_Mesh interface.
    def GetMesh
     Method that returns the mesh.
    def GetName
     Get mesh name.
    def SetName
     Set name to mesh.
    def GetSubMesh
     Get the subMesh object associated to a subShape.
    def GetShape
     Method that returns the shape associated to the mesh.
    def SetShape
     Method that associates given shape to the mesh(entails the mesh recreation).
    def IsReadyToCompute
     Return true if hypotheses are defined well.
    def GetAlgoState
     Return errors of hypotheses definintion error list is empty if everything is OK.
    def GetGeometryByMeshElement
     Return geometrical object the given element is built on.
    def MeshDimension
     Returns mesh dimension depending on shape one.
    def Segment
     Creates a segment discretization 1D algorithm.
    def Triangle
     Creates a triangle 2D algorithm for faces.
    def Quadrangle
     Creates a quadrangle 2D algorithm for faces.
    def Tetrahedron
     Creates a tetrahedron 3D algorithm for solids.
    def Hexahedron
     Creates a hexahedron 3D algorithm for solids.
    def Netgen
     Deprecated, only for compatibility!
    def Projection1D
     Creates a projection 1D algorithm for edges.
    def Projection2D
     Creates a projection 2D algorithm for faces.
    def Projection3D
     Creates a projection 3D algorithm for solids.
    def Prism
     Creates a 3D extrusion (Prism 3D) or RadialPrism 3D algorithm for solids.
    def Compute
     Compute the mesh and return the status of the computation.
    def AutomaticTetrahedralization
     Compute tetrahedral mesh using AutomaticLength + MEFISTO + NETGEN The parameter fineness [0,-1] defines mesh fineness.
    def AutomaticHexahedralization
     Compute hexahedral mesh using AutomaticLength + Quadrangle + Hexahedron The parameter fineness [0,-1] defines mesh fineness.
    def AddHypothesis
     Assign hypothesis.
    def GetHypothesisList
     Get the list of hypothesis added on a geom.
    def RemoveGlobalHypotheses
     Removes all global hypotheses.
    def Group
     Create a mesh group based on geometric object grp and give a name,
    - if this parameter is not defined the name is the same as the geometric group name
    - Note: Works like GroupOnGeom().
    def ExportToMED
     Deprecated, only for compatibility! Please, use ExportMED() method instead.
    def ExportMED
     Export the mesh in a file with the MED format.
    def ExportDAT
     Export the mesh in a file with the DAT format.
    def ExportUNV
     Export the mesh in a file with the UNV format.
    def ExportSTL
     Export the mesh in a file with the STL format.
    def CreateEmptyGroup
     Creates an empty mesh group.
    def GroupOnGeom
     Creates a mesh group based on geometric object grp and give a name,
    - if this parameter is not defined the name is the same as the geometric group name.
    def MakeGroupByIds
     Create a mesh group by the given ids of elements.
    def MakeGroup
     Create a mesh group by the given conditions.
    def MakeGroupByCriterion
     Create a mesh group by the given criterion.
    def MakeGroupByCriteria
     Create a mesh group by the given criteria(list of criterions).
    def MakeGroupByFilter
     Create a mesh group by the given filter.
    def GetIdsFromFilter
     Pass mesh elements through the given filter and return ids.
    def GetFreeBorders
     Verify whether 2D mesh element has free edges(edges connected to one face only)
    - Returns list of special structures(borders).
    def RemoveGroup
     Remove a group.
    def RemoveGroupWithContents
     Remove group with its contents.
    def GetGroups
     Get the list of groups existing in the mesh.
    def GetGroupNames
     Get the list of names of groups existing in the mesh.
    def UnionGroups
     Union of two groups New group is created.
    def IntersectGroups
     Intersection of two groups New group is created.
    def CutGroups
     Cut of two groups New group is created.
    def GetLog
     Get the log of nodes and elements added or removed since previous clear of the log.
    def ClearLog
     Clear the log of nodes and elements added or removed since previous clear.
    def GetId
     Get the internal Id.
    def GetStudyId
     Get the study Id.
    def HasDuplicatedGroupNamesMED
     Check group names for duplications.
    def GetMeshEditor
     Obtain instance of SMESH_MeshEditor.
    def GetMEDMesh
     Get MED Mesh.
    def NbNodes
     Returns number of nodes in mesh.
    def NbElements
     Returns number of elements in mesh.
    def NbEdges
     Returns number of edges in mesh.
    def NbEdgesOfOrder
     Returns number of edges with given order in mesh.
    def NbFaces
     Returns number of faces in mesh.
    def NbFacesOfOrder
     Returns number of faces with given order in mesh.
    def NbTriangles
     Returns number of triangles in mesh.
    def NbTrianglesOfOrder
     Returns number of triangles with given order in mesh.
    def NbQuadrangles
     Returns number of quadrangles in mesh.
    def NbQuadranglesOfOrder
     Returns number of quadrangles with given order in mesh.
    def NbPolygons
     Returns number of polygons in mesh.
    def NbVolumes
     Returns number of volumes in mesh.
    def NbVolumesOfOrder
     Returns number of volumes with given order in mesh.
    def NbTetras
     Returns number of tetrahedrons in mesh.
    def NbTetrasOfOrder
     Returns number of tetrahedrons with given order in mesh.
    def NbHexas
     Returns number of hexahedrons in mesh.
    def NbHexasOfOrder
     Returns number of hexahedrons with given order in mesh.
    def NbPyramids
     Returns number of pyramids in mesh.
    def NbPyramidsOfOrder
     Returns number of pyramids with given order in mesh.
    def NbPrisms
     Returns number of prisms in mesh.
    def NbPrismsOfOrder
     Returns number of prisms with given order in mesh.
    def NbPolyhedrons
     Returns number of polyhedrons in mesh.
    def NbSubMesh
     Returns number of submeshes in mesh.
    def GetElementsId
     Returns list of mesh elements ids.
    def GetElementsByType
     Returns list of ids of mesh elements with given type.
    def GetNodesId
     Returns list of mesh nodes ids.
    def GetElementType
     Returns type of mesh element.
    def GetSubMeshElementsId
     Returns list of submesh elements ids.
    def GetSubMeshNodesId
     Returns list of submesh nodes ids.
    def GetSubMeshElementType
     Returns list of ids of submesh elements with given type.
    def Dump
     Get mesh description.
    def GetNodeXYZ
     Get XYZ coordinates of node as list of double
    - If there is not node for given ID - returns empty list.
    def GetNodeInverseElements
     For given node returns list of IDs of inverse elements
    - If there is not node for given ID - returns empty list.
    def GetShapeID
     If given element is node returns IDs of shape from position
    - If there is not node for given ID - returns -1.
    def GetShapeIDForElem
     For given element returns ID of result shape after FindShape() from SMESH_MeshEditor
    - If there is not element for given ID - returns -1.
    def GetElemNbNodes
     Returns number of nodes for given element
    - If there is not element for given ID - returns -1.
    def GetElemNode
     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.
    def IsMediumNode
     Returns true if given node is medium node in given quadratic element.
    def IsMediumNodeOfAnyElem
     Returns true if given node is medium node in one of quadratic elements.
    def ElemNbEdges
     Returns number of edges for given element.
    def ElemNbFaces
     Returns number of faces for given element.
    def IsPoly
     Returns true if given element is polygon.
    def IsQuadratic
     Returns true if given element is quadratic.
    def BaryCenter
     Returns XYZ coordinates of bary center for given element as list of double
    - If there is not element for given ID - returns empty list.
    def RemoveElements
     Removes elements from mesh by ids.
    def RemoveNodes
     Removes nodes from mesh by ids.
    def AddNode
     Add node to mesh by coordinates.
    def AddEdge
     Create edge both similar and quadratic (this is determed by number of given nodes).
    def AddFace
     Create face both similar and quadratic (this is determed by number of given nodes).
    def AddPolygonalFace
     Add polygonal face to mesh by list of nodes ids.
    def AddVolume
     Create volume both similar and quadratic (this is determed by number of given nodes).
    def AddPolyhedralVolume
     Create volume of many faces, giving nodes for each face.
    def AddPolyhedralVolumeByFaces
     Create volume of many faces, giving IDs of existing faces.
    def MoveNode
     Move node with given id.
    def FindNodeClosestTo
     Find a node closest to a point.
    def MeshToPassThroughAPoint
     Find a node closest to a point and move it to a point location.
    def InverseDiag
     Replace two neighbour triangles sharing Node1-Node2 link with ones built on the same 4 nodes but having other common link.
    def DeleteDiag
     Replace two neighbour triangles sharing Node1-Node2 link with a quadrangle built on the same 4 nodes.
    def Reorient
     Reorient elements by ids.
    def ReorientObject
     Reorient all elements of the object.
    def TriToQuad
     Fuse neighbour triangles into quadrangles.
    def TriToQuadObject
     Fuse neighbour triangles of the object into quadrangles.
    def QuadToTri
     Split quadrangles into triangles.
    def QuadToTriObject
     Split quadrangles into triangles.
    def SplitQuad
     Split quadrangles into triangles.
    def SplitQuadObject
     Split quadrangles into triangles.
    def BestSplit
     Find better splitting of the given quadrangle.
    def SplitQuadsNearTriangularFacets
     Split quafrangle faces near triangular facets of volumes.
    def SplitHexaToTetras
     Split hexahedrons into tetrahedrons.
    def SplitHexaToPrisms
     Split hexahedrons into prisms.
    def Smooth
     Smooth elements.
    def SmoothObject
     Smooth elements belong to given object.
    def SmoothParametric
     Parametric smooth the given elements.
    def SmoothParametricObject
     Parametric smooth elements belong to given object.
    def ConvertToQuadratic
     Converts all mesh to quadratic one, deletes old elements, replacing them with quadratic ones with the same id.
    def ConvertFromQuadratic
     Converts all mesh from quadratic to ordinary ones, deletes old quadratic elements,
    - replacing them with ordinary mesh elements with the same id.
    def RenumberNodes
     Renumber mesh nodes.
    def RenumberElements
     Renumber mesh elements.
    def RotationSweep
     Generate new elements by rotation of the elements around the axis.
    def RotationSweepObject
     Generate new elements by rotation of the elements of object around the axis.
    def ExtrusionSweep
     Generate new elements by extrusion of the elements with given ids.
    def AdvancedExtrusion
     Generate new elements by extrusion of the elements with given ids.
    def ExtrusionSweepObject
     Generate new elements by extrusion of the elements belong to object.
    def ExtrusionSweepObject1D
     Generate new elements by extrusion of the elements belong to object.
    def ExtrusionSweepObject2D
     Generate new elements by extrusion of the elements belong to object.
    def ExtrusionAlongPath
     Generate new elements by extrusion of the given elements A path of extrusion must be a meshed edge.
    def ExtrusionAlongPathObject
     Generate new elements by extrusion of the elements belong to object A path of extrusion must be a meshed edge.
    def Mirror
     Symmetrical copy of mesh elements.
    def MirrorObject
     Symmetrical copy of object.
    def Translate
     Translates the elements.
    def TranslateObject
     Translates the object.
    def Rotate
     Rotates the elements.
    def RotateObject
     Rotates the object.
    def FindCoincidentNodes
     Find group of nodes close to each other within Tolerance.
    def FindCoincidentNodesOnPart
     Find group of nodes close to each other within Tolerance.
    def MergeNodes
     Merge nodes.
    def FindEqualElements
     Find elements built on the same nodes.
    def MergeElements
     Merge elements in each given group.
    def MergeEqualElements
     Remove all but one of elements built on the same nodes.
    def SewFreeBorders
     Sew free borders.
    def SewConformFreeBorders
     Sew conform free borders.
    def SewBorderToSide
     Sew border to side.
    def SewSideElements
     Sew two sides of a mesh.
    def ChangeElemNodes
     Set new nodes for given element.
    def GetLastCreatedNodes
     If during last operation of MeshEditor some nodes were created this method returns list of it's IDs,
    - if new nodes not created - returns empty list.
    def GetLastCreatedElems
     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.

    Data Fields

     geom
     mesh
     editor

    Static Public Attributes

    int geom = 0
    int mesh = 0
    int editor = 0
    -


    Detailed Description

    -The class contains mesh shape, SMESH_Mesh, SMESH_MeshEditor More details. -

    -


    Member Function Documentation

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.__init__   self,
      obj = 0,
      name = 0
    -
    - - - - - -
    -   - - -

    -Creates mesh on the shape geom(or the empty mesh if geom equal to 0), sets GUI name of this mesh to name.

    Parameters:
    - - - -
    obj Shape to be meshed or SMESH_Mesh object
    name Study name of the mesh
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.SetMesh   self,
      theMesh
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    theMesh is SMESH_Mesh object
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.GetMesh   self  ) 
    -
    - - - - - -
    -   - - -

    -

    Returns:
    SMESH_Mesh object
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.GetName   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.SetName   self,
      name
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.GetSubMesh   self,
      theSubObject,
      name
    -
    - - - - - -
    -   - - -

    -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...

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.GetShape   self  ) 
    -
    - - - - - -
    -   - - -

    -

    Returns:
    GEOM_Object
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.SetShape   self,
      geom
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    geom shape to be meshed(GEOM_Object)
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.IsReadyToCompute   self,
      theSubObject
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    theMesh is an instance of Mesh class
    theSubObject subshape of a mesh shape
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.GetAlgoState   self,
      theSubObject
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    theMesh is an instance of Mesh class
    theSubObject subshape of a mesh shape
    -
    -
    Returns:
    a list of errors
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.GetGeometryByMeshElement   self,
      theElementID,
      theGeomName
    -
    - - - - - -
    -   - - -

    -The returned geometrical object, if not nil, is either found in the study or is published by this method with the given name

    Parameters:
    - - - - -
    theMesh is an instance of Mesh class
    theElementID an id of the mesh element
    theGeomName user defined name of geometrical object
    -
    -
    Returns:
    GEOM.GEOM_Object instance
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.MeshDimension   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.Segment   self,
      algo = REGULAR,
      geom = 0
    -
    - - - - - -
    -   - - -

    -If the optional algo parameter is not sets, this algorithm is REGULAR. If the optional geom parameter is not sets, this algorithm is global.
    - Otherwise, this algorithm define a submesh based on geom subshape.

    Parameters:
    - - - -
    algo values are smesh.REGULAR or smesh.PYTHON for discretization via python function
    geom If defined, subshape to be meshed
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.Triangle   self,
      algo = MEFISTO,
      geom = 0
    -
    - - - - - -
    -   - - -

    -If the optional geom parameter is not sets, this algorithm is global.
    - Otherwise, this algorithm define a submesh based on geom subshape.

    Parameters:
    - - - -
    algo values are: smesh.MEFISTO or smesh.NETGEN
    geom If defined, subshape to be meshed
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.Quadrangle   self,
      geom = 0
    -
    - - - - - -
    -   - - -

    -If the optional geom parameter is not sets, this algorithm is global.
    - Otherwise, this algorithm define a submesh based on geom subshape.

    Parameters:
    - - -
    geom If defined, subshape to be meshed
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.Tetrahedron   self,
      algo = NETGEN,
      geom = 0
    -
    - - - - - -
    -   - - -

    -The parameter algo permits to choice the algorithm: NETGEN or GHS3D If the optional geom parameter is not sets, this algorithm is global.
    - Otherwise, this algorithm define a submesh based on geom subshape.

    Parameters:
    - - - -
    algo values are: smesh.NETGEN, smesh.GHS3D, smesh.FULL_NETGEN
    geom If defined, subshape to be meshed
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.Hexahedron   self,
      geom = 0
    -
    - - - - - -
    -   - - -

    -If the optional geom parameter is not sets, this algorithm is global.
    - Otherwise, this algorithm define a submesh based on geom subshape.

    Parameters:
    - - -
    geom If defined, subshape to be meshed
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.Netgen   self,
      is3D,
      geom = 0
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.Projection1D   self,
      geom = 0
    -
    - - - - - -
    -   - - -

    -If the optional geom parameter is not sets, this algorithm is global. Otherwise, this algorithm define a submesh based on geom subshape.

    Parameters:
    - - -
    geom If defined, subshape to be meshed
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.Projection2D   self,
      geom = 0
    -
    - - - - - -
    -   - - -

    -If the optional geom parameter is not sets, this algorithm is global. Otherwise, this algorithm define a submesh based on geom subshape.

    Parameters:
    - - -
    geom If defined, subshape to be meshed
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.Projection3D   self,
      geom = 0
    -
    - - - - - -
    -   - - -

    -If the optional geom parameter is not sets, this algorithm is global. Otherwise, this algorithm define a submesh based on geom subshape.

    Parameters:
    - - -
    geom If defined, subshape to be meshed
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.Prism   self,
      geom = 0
    -
    - - - - - -
    -   - - -

    -If the optional geom parameter is not sets, this algorithm is global. Otherwise, this algorithm define a submesh based on geom subshape.

    Parameters:
    - - -
    geom If defined, subshape to be meshed
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.Compute   self,
      geom = 0
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.AutomaticTetrahedralization   self,
      fineness = 0
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.AutomaticHexahedralization   self,
      fineness = 0
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.AddHypothesis   self,
      hyp,
      geom = 0
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    hyp is a hypothesis to assign
    geom is subhape of mesh geometry
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.GetHypothesisList   self,
      geom
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    geom is subhape of mesh geometry
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.RemoveGlobalHypotheses   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.Group   self,
      grp,
      name = ""
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    grp is a geometric group, a vertex, an edge, a face or a solid
    name is the name of the mesh group
    -
    -
    Returns:
    SMESH_GroupOnGeom
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.ExportToMED   self,
      f,
      version,
      opt = 0
    -
    - - - - - -
    -   - - -

    -Export the mesh in a file with the MED format and choice the version of MED format

    Parameters:
    - - - -
    f is the file name
    version values are SMESH.MED_V2_1, SMESH.MED_V2_2
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.ExportMED   self,
      f,
      auto_groups = 0,
      version = MED_V2_2
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - -
    f is the file name
    auto_groups boolean parameter for creating/not creating the groups Group_On_All_Nodes, Group_On_All_Faces, ... ; the typical use is auto_groups=false.
    version MED format version(MED_V2_1 or MED_V2_2)
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.ExportDAT   self,
      f
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    f is the file name
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.ExportUNV   self,
      f
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    f is the file name
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.ExportSTL   self,
      f,
      ascii = 1
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    f is the file name
    ascii defined the kind of file contents
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.CreateEmptyGroup   self,
      elementType,
      name
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    elementType is the type of elements in the group
    name is the name of the mesh group
    -
    -
    Returns:
    SMESH_Group
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.GroupOnGeom   self,
      grp,
      name = "",
      type = None
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    grp is a geometric group, a vertex, an edge, a face or a solid
    name is the name of the mesh group
    -
    -
    Returns:
    SMESH_GroupOnGeom
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.MakeGroupByIds   self,
      groupName,
      elementType,
      elemIDs
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - -
    groupName is the name of the mesh group
    elementType is the type of elements in the group
    elemIDs is the list of ids
    -
    -
    Returns:
    SMESH_Group
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.MakeGroup   self,
      groupName,
      elementType,
      CritType = FT_Undefined,
      Compare = FT_EqualTo,
      Treshold = "",
      UnaryOp = FT_Undefined
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - - - - -
    groupName is the name of the mesh group
    elementType is the type of elements in the group
    CritType is type of criterion( FT_Taper, FT_Area, FT_RangeOfIds, FT_LyingOnGeom etc. )
    Compare belong to {FT_LessThan, FT_MoreThan, FT_EqualTo}
    Treshold is threshold value (range of id ids as string, shape, numeric)
    UnaryOp is FT_LogicalNOT or FT_Undefined
    -
    -
    Returns:
    SMESH_Group
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.MakeGroupByCriterion   self,
      groupName,
      Criterion
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    groupName is the name of the mesh group
    Criterion is the instance of Criterion class
    -
    -
    Returns:
    SMESH_Group
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.MakeGroupByCriteria   self,
      groupName,
      theCriteria
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    groupName is the name of the mesh group
    Criteria is the list of criterions
    -
    -
    Returns:
    SMESH_Group
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.MakeGroupByFilter   self,
      groupName,
      theFilter
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    groupName is the name of the mesh group
    Criterion is the instance of Filter class
    -
    -
    Returns:
    SMESH_Group
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.GetIdsFromFilter   self,
      theFilter
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    theFilter is SMESH_Filter
    -
    -
    Returns:
    list of ids
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.GetFreeBorders   self  ) 
    -
    - - - - - -
    -   - - -

    -

    Returns:
    list of SMESH.FreeEdges.Border structure: edge id and two its nodes ids.
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.RemoveGroup   self,
      group
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.RemoveGroupWithContents   self,
      group
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.GetGroups   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.GetGroupNames   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.UnionGroups   self,
      group1,
      group2,
      name
    -
    - - - - - -
    -   - - -

    -All mesh elements that are present in initial groups are added to the new one

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.IntersectGroups   self,
      group1,
      group2,
      name
    -
    - - - - - -
    -   - - -

    -All mesh elements that are present in both initial groups are added to the new one.

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.CutGroups   self,
      mainGroup,
      toolGroup,
      name
    -
    - - - - - -
    -   - - -

    -All mesh elements that are present in main group but do not present in tool group are added to the new one

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.GetLog   self,
      clearAfterGet
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    clearAfterGet log is emptied after Get (safe if concurrents access)
    -
    -
    Returns:
    list of log_block structures: commandType number coords indexes
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.ClearLog   self  ) 
    -
    - - - - - -
    -   - - -

    -Must be used immediately after GetLog if clearAfterGet is false.

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.GetId   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.GetStudyId   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.HasDuplicatedGroupNamesMED   self  ) 
    -
    - - - - - -
    -   - - -

    -Consider maximum group name length stored in MED file.

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.GetMeshEditor   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.GetMEDMesh   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.NbNodes   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.NbElements   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.NbEdges   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.NbEdgesOfOrder   self,
      elementOrder
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    elementOrder is order of elements: ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.NbFaces   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.NbFacesOfOrder   self,
      elementOrder
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    elementOrder is order of elements: ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.NbTriangles   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.NbTrianglesOfOrder   self,
      elementOrder
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    elementOrder is order of elements: ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.NbQuadrangles   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.NbQuadranglesOfOrder   self,
      elementOrder
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    elementOrder is order of elements: ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.NbPolygons   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.NbVolumes   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.NbVolumesOfOrder   self,
      elementOrder
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    elementOrder is order of elements: ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.NbTetras   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.NbTetrasOfOrder   self,
      elementOrder
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    elementOrder is order of elements: ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.NbHexas   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.NbHexasOfOrder   self,
      elementOrder
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    elementOrder is order of elements: ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.NbPyramids   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.NbPyramidsOfOrder   self,
      elementOrder
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    elementOrder is order of elements: ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.NbPrisms   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.NbPrismsOfOrder   self,
      elementOrder
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    elementOrder is order of elements: ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.NbPolyhedrons   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.NbSubMesh   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.GetElementsId   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.GetElementsByType   self,
      elementType
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    elementType is required type of elements
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.GetNodesId   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.GetElementType   self,
      id,
      iselem
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.GetSubMeshElementsId   self,
      shapeID
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    shapeID is geom object(subshape) IOR
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.GetSubMeshNodesId   self,
      shapeID,
      all
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    shapeID is geom object(subshape) IOR
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.GetSubMeshElementType   self,
      shapeID
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    shapeID is geom object(subshape) IOR
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.Dump   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.GetNodeXYZ   self,
      id
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.GetNodeInverseElements   self,
      id
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.GetShapeID   self,
      id
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.GetShapeIDForElem   id  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.GetElemNbNodes   self,
      id
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.GetElemNode   self,
      id,
      index
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.IsMediumNode   self,
      elementID,
      nodeID
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.IsMediumNodeOfAnyElem   self,
      nodeID,
      elementType
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.ElemNbEdges   self,
      id
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.ElemNbFaces   self,
      id
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.IsPoly   self,
      id
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.IsQuadratic   self,
      id
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.BaryCenter   self,
      id
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.RemoveElements   self,
      IDsOfElements
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    IDsOfElements is list of ids of elements to remove
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.RemoveNodes   self,
      IDsOfNodes
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    IDsOfNodes is list of ids of nodes to remove
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.AddNode   self,
      x,
      y,
      z
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.AddEdge   self,
      IDsOfNodes
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    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.
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.AddFace   self,
      IDsOfNodes
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    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.
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.AddPolygonalFace   self,
      IdsOfNodes
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.AddVolume   self,
      IDsOfNodes
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    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.
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.AddPolyhedralVolume   self,
      IdsOfNodes,
      Quantities
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    IdsOfNodes List of node IDs for volume creation face by face.
    Quantities List of integer values, Quantities[i] gives quantity of nodes in face number i.
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.AddPolyhedralVolumeByFaces   self,
      IdsOfFaces
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    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.
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.MoveNode   self,
      NodeID,
      x,
      y,
      z
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - - -
    NodeID id of the node
    x new X coordinate
    y new Y coordinate
    z new Z coordinate
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.FindNodeClosestTo   self,
      x,
      y,
      z
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - -
    x X coordinate of a point
    y Y coordinate of a point
    z Z coordinate of a point
    -
    -
    Returns:
    id of a node
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.MeshToPassThroughAPoint   self,
      x,
      y,
      z
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - -
    x X coordinate of a point
    y Y coordinate of a point
    z Z coordinate of a point
    -
    -
    Returns:
    id of a moved node
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.InverseDiag   self,
      NodeID1,
      NodeID2
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    NodeID1 first node id
    NodeID2 second node id
    -
    -
    Returns:
    false if proper faces not found
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.DeleteDiag   self,
      NodeID1,
      NodeID2
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    NodeID1 first node id
    NodeID2 second node id
    -
    -
    Returns:
    false if proper faces not found
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.Reorient   self,
      IDsOfElements = None
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    IDsOfElements if undefined reorient all mesh elements
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.ReorientObject   self,
      theObject
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    theObject is mesh, submesh or group
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.TriToQuad   self,
      IDsOfElements,
      theCriterion,
      MaxAngle
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - -
    IDsOfElements The triangles to be fused,
    theCriterion is FT_...; used to choose a neighbour to fuse with.
    MaxAngle is a max angle between element normals at which fusion is still performed; theMaxAngle is mesured in radians.
    -
    -
    Returns:
    TRUE in case of success, FALSE otherwise.
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.TriToQuadObject   self,
      theObject,
      theCriterion,
      MaxAngle
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - -
    theObject is mesh, submesh or group
    theCriterion is FT_...; used to choose a neighbour to fuse with.
    MaxAngle is a max angle between element normals at which fusion is still performed; theMaxAngle is mesured in radians.
    -
    -
    Returns:
    TRUE in case of success, FALSE otherwise.
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.QuadToTri   self,
      IDsOfElements,
      theCriterion
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - -
    IDsOfElements the faces to be splitted.
    theCriterion is FT_...; used to choose a diagonal for splitting.
     TRUE in case of success, FALSE otherwise.
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.QuadToTriObject   self,
      theObject,
      theCriterion
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    theObject object to taking list of elements from, is mesh, submesh or group
    theCriterion is FT_...; used to choose a diagonal for splitting.
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.SplitQuad   self,
      IDsOfElements,
      Diag13
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    theElems The faces to be splitted
    the13Diag is used to choose a diagonal for splitting.
    -
    -
    Returns:
    TRUE in case of success, FALSE otherwise.
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.SplitQuadObject   self,
      theObject,
      Diag13
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    theObject is object to taking list of elements from, is mesh, submesh or group
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.BestSplit   self,
      IDOfQuad,
      theCriterion
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    IDOfQuad ID of the quadrangle to be splitted.
    theCriterion is FT_...; a criterion to choose a diagonal for splitting.
    -
    -
    Returns:
    1 if 1-3 diagonal is better, 2 if 2-4 diagonal is better, 0 if error occurs.
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.SplitQuadsNearTriangularFacets   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.SplitHexaToTetras   self,
      theObject,
      theNode000,
      theNode001
    -
    - - - - - -
    -   - - -

    -Use pattern mapping functionality for splitting.

    Parameters:
    - - - - -
    theObject object to take list of hexahedrons from; is mesh, submesh or group.
    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.
     TRUE in case of success, FALSE otherwise.
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.SplitHexaToPrisms   self,
      theObject,
      theNode000,
      theNode001
    -
    - - - - - -
    -   - - -

    -Use pattern mapping functionality for splitting.

    Parameters:
    - - - - -
    theObject object to take list of hexahedrons from; is mesh, submesh or group.
    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.
     TRUE in case of success, FALSE otherwise.
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.Smooth   self,
      IDsOfElements,
      IDsOfFixedNodes,
      MaxNbOfIterations,
      MaxAspectRatio,
      Method
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - - - -
    IDsOfElements list if ids of elements to smooth
    IDsOfFixedNodes list of ids of fixed nodes. Note that nodes built on edges and boundary nodes are always fixed.
    MaxNbOfIterations maximum number of iterations
    MaxAspectRatio varies in range [1.0, inf]
    Method is Laplacian(LAPLACIAN_SMOOTH) or Centroidal(CENTROIDAL_SMOOTH)
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.SmoothObject   self,
      theObject,
      IDsOfFixedNodes,
      MaxNbOfIterations,
      MaxxAspectRatio,
      Method
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - - - -
    theObject object to smooth
    IDsOfFixedNodes list of ids of fixed nodes. Note that nodes built on edges and boundary nodes are always fixed.
    MaxNbOfIterations maximum number of iterations
    MaxAspectRatio varies in range [1.0, inf]
    Method is Laplacian(LAPLACIAN_SMOOTH) or Centroidal(CENTROIDAL_SMOOTH)
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.SmoothParametric   IDsOfElements,
      IDsOfFixedNodes,
      MaxNbOfIterations,
      MaxAspectRatio,
      Method
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - - - -
    IDsOfElements list if ids of elements to smooth
    IDsOfFixedNodes list of ids of fixed nodes. Note that nodes built on edges and boundary nodes are always fixed.
    MaxNbOfIterations maximum number of iterations
    MaxAspectRatio varies in range [1.0, inf]
    Method is Laplacian(LAPLACIAN_SMOOTH) or Centroidal(CENTROIDAL_SMOOTH)
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.SmoothParametricObject   self,
      theObject,
      IDsOfFixedNodes,
      MaxNbOfIterations,
      MaxAspectRatio,
      Method
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - - - -
    theObject object to smooth
    IDsOfFixedNodes list of ids of fixed nodes. Note that nodes built on edges and boundary nodes are always fixed.
    MaxNbOfIterations maximum number of iterations
    MaxAspectRatio varies in range [1.0, inf]
    Method is Laplacian(LAPLACIAN_SMOOTH) or Centroidal(CENTROIDAL_SMOOTH)
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.ConvertToQuadratic   self,
      theForce3d
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.ConvertFromQuadratic   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.RenumberNodes   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.RenumberElements   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.RotationSweep   self,
      IDsOfElements,
      Axix,
      AngleInRadians,
      NbOfSteps,
      Tolerance
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - - - -
    IDsOfElements list of ids of elements to sweep
    Axix axis of rotation, AxisStruct or line(geom object)
    AngleInRadians angle of Rotation
    NbOfSteps number of steps
    Tolerance tolerance
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.RotationSweepObject   self,
      theObject,
      Axix,
      AngleInRadians,
      NbOfSteps,
      Tolerance
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - - - -
    theObject object wich elements should be sweeped
    Axix axis of rotation, AxisStruct or line(geom object)
    AngleInRadians angle of Rotation
    NbOfSteps number of steps
    Tolerance tolerance
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.ExtrusionSweep   self,
      IDsOfElements,
      StepVector,
      NbOfSteps
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - -
    IDsOfElements list of elements ids for extrusion
    StepVector vector, defining the direction and value of extrusion
    NbOfSteps the number of steps
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.AdvancedExtrusion   self,
      IDsOfElements,
      StepVector,
      NbOfSteps,
      ExtrFlags,
      SewTolerance
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - - - -
    IDsOfElements is ids of elements
    StepVector vector, defining the direction and value of extrusion
    NbOfSteps the number of steps
    ExtrFlags set flags for performing extrusion
    SewTolerance uses for comparing locations of nodes if flag EXTRUSION_FLAG_SEW is set
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.ExtrusionSweepObject   self,
      theObject,
      StepVector,
      NbOfSteps
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - -
    theObject object wich elements should be processed
    StepVector vector, defining the direction and value of extrusion
    NbOfSteps the number of steps
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.ExtrusionSweepObject1D   self,
      theObject,
      StepVector,
      NbOfSteps
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - -
    theObject object wich elements should be processed
    StepVector vector, defining the direction and value of extrusion
    NbOfSteps the number of steps
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.ExtrusionSweepObject2D   self,
      theObject,
      StepVector,
      NbOfSteps
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - -
    theObject object wich elements should be processed
    StepVector vector, defining the direction and value of extrusion
    NbOfSteps the number of steps
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.ExtrusionAlongPath   self,
      IDsOfElements,
      PathMesh,
      PathShape,
      NodeStart,
      HasAngles,
      Angles,
      HasRefPoint,
      RefPoint,
      LinearVariation = False
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - - - - - - - -
    IDsOfElements is ids of elements
    PathMesh mesh containing a 1D sub-mesh on the edge, along which proceeds the extrusion
    PathShape is shape(edge); as the mesh can be complex, the edge is used to define the sub-mesh for the path
    NodeStart the first or the last node on the edge. It is used to define the direction of extrusion
    HasAngles allows the shape to be rotated around the path to get the resulting mesh in a helical fashion
    Angles list of angles
    HasRefPoint allows to use base point
    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.
    LinearVariation makes compute rotation angles as linear variation of given Angles along path steps
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.ExtrusionAlongPathObject   self,
      theObject,
      PathMesh,
      PathShape,
      NodeStart,
      HasAngles,
      Angles,
      HasRefPoint,
      RefPoint,
      LinearVariation = False
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - - - - - - - -
    IDsOfElements is ids of elements
    PathMesh mesh containing a 1D sub-mesh on the edge, along which proceeds the extrusion
    PathShape is shape(edge); as the mesh can be complex, the edge is used to define the sub-mesh for the path
    NodeStart the first or the last node on the edge. It is used to define the direction of extrusion
    HasAngles allows the shape to be rotated around the path to get the resulting mesh in a helical fashion
    Angles list of angles
    HasRefPoint allows to use base point
    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.
    LinearVariation makes compute rotation angles as linear variation of given Angles along path steps
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.Mirror   self,
      IDsOfElements,
      Mirror,
      theMirrorType,
      Copy = 0
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - - -
    IDsOfElements list of elements ids
    Mirror is AxisStruct or geom object(point, line, plane)
    theMirrorType is POINT, AXIS or PLANE If the Mirror is geom object this parameter is unnecessary
    Copy allows to copy element(Copy is 1) or to replace with its mirroring(Copy is 0)
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.MirrorObject   self,
      theObject,
      Mirror,
      theMirrorType,
      Copy = 0
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - - -
    theObject mesh, submesh or group
    Mirror is AxisStruct or geom object(point, line, plane)
    theMirrorType is POINT, AXIS or PLANE If the Mirror is geom object this parameter is unnecessary
    Copy allows to copy element(Copy is 1) or to replace with its mirroring(Copy is 0)
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.Translate   self,
      IDsOfElements,
      Vector,
      Copy
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - -
    IDsOfElements list of elements ids
    Vector direction of translation(DirStruct or vector)
    Copy allows to copy the translated elements
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.TranslateObject   self,
      theObject,
      Vector,
      Copy
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - -
    theObject object to translate(mesh, submesh, or group)
    Vector direction of translation(DirStruct or geom vector)
    Copy allows to copy the translated elements
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.Rotate   self,
      IDsOfElements,
      Axis,
      AngleInRadians,
      Copy
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - - -
    IDsOfElements list of elements ids
    Axis axis of rotation(AxisStruct or geom line)
    AngleInRadians angle of rotation(in radians)
    Copy allows to copy the rotated elements
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.RotateObject   self,
      theObject,
      Axis,
      AngleInRadians,
      Copy
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - - -
    theObject object to rotate(mesh, submesh, or group)
    Axis axis of rotation(AxisStruct or geom line)
    AngleInRadians angle of rotation(in radians)
    Copy allows to copy the rotated elements
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.FindCoincidentNodes   self,
      Tolerance
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    Tolerance tolerance value
    list of group of nodes
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.FindCoincidentNodesOnPart   self,
      SubMeshOrGroup,
      Tolerance
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - -
    Tolerance tolerance value
    SubMeshOrGroup SubMesh or Group
    list of group of nodes
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.MergeNodes   self,
      GroupsOfNodes
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    list of group of nodes
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.FindEqualElements   self,
      MeshOrSubMeshOrGroup
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    MeshOrSubMeshOrGroup Mesh or SubMesh, or Group of elements for searching
    -
    -
    Returns:
    a list of groups of equal elements
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.MergeElements   self,
      GroupsOfElementsID
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    GroupsOfElementsID groups of elements for merging
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.MergeEqualElements   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.SewFreeBorders   self,
      FirstNodeID1,
      SecondNodeID1,
      LastNodeID1,
      FirstNodeID2,
      SecondNodeID2,
      LastNodeID2,
      CreatePolygons,
      CreatePolyedrs
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.SewConformFreeBorders   self,
      FirstNodeID1,
      SecondNodeID1,
      LastNodeID1,
      FirstNodeID2,
      SecondNodeID2
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.SewBorderToSide   self,
      FirstNodeIDOnFreeBorder,
      SecondNodeIDOnFreeBorder,
      LastNodeIDOnFreeBorder,
      FirstNodeIDOnSide,
      LastNodeIDOnSide,
      CreatePolygons,
      CreatePolyedrs
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.SewSideElements   self,
      IDsOfSide1Elements,
      IDsOfSide2Elements,
      NodeID1OfSide1ToMerge,
      NodeID1OfSide2ToMerge,
      NodeID2OfSide1ToMerge,
      NodeID2OfSide2ToMerge
    -
    - - - - - -
    -   - - -

    -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.

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh.ChangeElemNodes   self,
      ide,
      newIDs
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    ide the element id
    newIDs nodes ids
    -
    -
    Returns:
    If number of nodes is not corresponded to type of element - returns false
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.GetLastCreatedNodes   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh.GetLastCreatedElems   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -


    Field Documentation

    -

    - - - - -
    - - - - -
    int smesh.Mesh.geom = 0 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh.mesh = 0 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh.editor = 0 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh.geom
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh.mesh
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh.editor
    -
    - - - - - -
    -   - - -

    -

    - - 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 index f960f7109..000000000 --- a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Algorithm.html +++ /dev/null @@ -1,556 +0,0 @@ - - - - - - Main Page - - - - -  - - - -

    -

    smesh.Mesh_Algorithm Class Reference

    Mother class to define algorithm, recommended to don't use directly. -More... -

    -Inheritance diagram for smesh.Mesh_Algorithm:

    Inheritance graph
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Public Member Functions

    def GetSubMesh
     If the algorithm is global, return 0;
    - else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     mesh
     geom
     subm
     algo

    Static Public Attributes

    int mesh = 0
    int geom = 0
    int subm = 0
    int algo = 0
    -

    Detailed Description

    -More details. -

    -


    Member Function Documentation

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetSubMesh   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetAlgorithm   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetCompatibleHypothesis   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetName   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.SetName   self,
      name
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetId   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Create   self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so"
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Hypothesis   self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so"
    -
    - - - - - -
    -   - - -

    -

    -


    Field Documentation

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.mesh = 0 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.geom = 0 [static]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_Segment.

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.subm = 0 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.algo = 0 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.mesh
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.geom
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_Segment.

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.subm
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.algo
    -
    - - - - - -
    -   - - -

    -

    - - 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 index 5cc00367fbc05dee84ea4efc889eab3bc8852474..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35584 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 diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__CompositeSegment.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__CompositeSegment.html deleted file mode 100644 index 5b9b534ce..000000000 --- a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__CompositeSegment.html +++ /dev/null @@ -1,973 +0,0 @@ - - - - - - Main Page - - - - -  - - - -

    -

    smesh.Mesh_CompositeSegment Class Reference

    Class to define a segment 1D algorithm for discretization. -More... -

    -Inheritance diagram for smesh.Mesh_CompositeSegment:

    Inheritance graph
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Public Member Functions

    def __init__
     Private constructor.
    def LocalLength
     Define "LocalLength" hypothesis to cut an edge in several segments with the same length.
    def NumberOfSegments
     Define "NumberOfSegments" hypothesis to cut an edge in several fixed number of segments.
    def Arithmetic1D
     Define "Arithmetic1D" hypothesis to cut an edge in several segments with arithmetic length increasing.
    def StartEndLength
     Define "StartEndLength" hypothesis to cut an edge in several segments with geometric length increasing.
    def Deflection1D
     Define "Deflection1D" hypothesis.
    def Propagation
     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 AutomaticLength
     Define "AutomaticLength" hypothesis.
    def LengthNearVertex
     Define "SegmentLengthAroundVertex" hypothesis.
    def QuadraticMesh
     Define "QuadraticMesh" hypothesis, forcing construction of quadratic edges.
    def GetSubMesh
     If the algorithm is global, return 0;
    - else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     geom
     mesh
     subm
     algo

    Static Public Attributes

    int mesh = 0
    int subm = 0
    int algo = 0
    -

    Detailed Description

    -More details. -

    -


    Member Function Documentation

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_CompositeSegment.__init__   self,
      mesh,
      geom = 0
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented from smesh.Mesh_Segment.

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment.LocalLength   self,
      l
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    l for the length of segments that cut an edge
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment.NumberOfSegments   self,
      n,
      s = []
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    n for the number of segments that cut an edge
    s for the scale factor (optional)
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment.Arithmetic1D   self,
      start,
      end
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    start for the length of the first segment
    end for the length of the last segment
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment.StartEndLength   self,
      start,
      end
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    start for the length of the first segment
    end for the length of the last segment
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment.Deflection1D   self,
      d
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    d for the deflection
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Segment.Propagation   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment.AutomaticLength   self,
      fineness = 0
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    fineness for the fineness [0-1]
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment.LengthNearVertex   self,
      length,
      vertex = 0
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    length for the segment length
    vertex for the length localization: vertex index [0,1] | verext object
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Segment.QuadraticMesh   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -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 smesh.Mesh_Algorithm.GetSubMesh   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetAlgorithm   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetCompatibleHypothesis   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetName   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.SetName   self,
      name
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetId   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Create   self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Hypothesis   self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -


    Field Documentation

    -

    - - - - -
    - - - - -
    smesh.Mesh_Segment.geom [inherited]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented from smesh.Mesh_Algorithm.

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.mesh = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.mesh [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.subm = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.subm [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.algo = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.algo [inherited]
    -
    - - - - - -
    -   - - -

    -

    - - diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__CompositeSegment__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__CompositeSegment__inherit__graph.jpg deleted file mode 100644 index f24ab014c4e1580aef4544b04510eabd75bb1efa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7883 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 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 index 4489d1f23..000000000 --- a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Hexahedron.html +++ /dev/null @@ -1,592 +0,0 @@ - - - - - - Main Page - - - - -  - - - -

    -

    smesh.Mesh_Hexahedron Class Reference

    Class to define a hexahedron 3D algorithm. -More... -

    -Inheritance diagram for smesh.Mesh_Hexahedron:

    Inheritance graph
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Public Member Functions

    def __init__
     Private constructor.
    def GetSubMesh
     If the algorithm is global, return 0;
    - else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     mesh
     geom
     subm
     algo

    Static Public Attributes

    int mesh = 0
    int geom = 0
    int subm = 0
    int algo = 0
    -

    Detailed Description

    -More details. -

    -


    Member Function Documentation

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Hexahedron.__init__   self,
      mesh,
      geom = 0
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetSubMesh   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetAlgorithm   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetCompatibleHypothesis   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetName   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.SetName   self,
      name
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetId   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Create   self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Hypothesis   self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -


    Field Documentation

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.mesh = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.mesh [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.geom = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_Segment.

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.geom [inherited]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_Segment.

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.subm = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.subm [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.algo = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.algo [inherited]
    -
    - - - - - -
    -   - - -

    -

    - - 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 index 08777ef7c519b924ce2444fca9653111096af116..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5525 zcmeI0XH*mGy2mF32ptJ6Kp->)r3gqbBC-Ji1wo2{Qlv|l-VC6E^r8erq=-mIdRMAc z5hdSN6+lbtDx3%Z?5f>HX7WDRXbhYQ!)Y9PAx~itZ?ISI5TA16$ z*3Qb?*^Ar5+sfI|%byCI1XKYEa&j0s83hamqokyuqG6(?p{Ax`gEP`Iak8VhIN6a% zZhlb#ZeC$NBvMf3w6K`Cq@*NDKu$?kLQ(Xbq{NR&Ae5ApG}JT*T3Unz50XdXzaC%< zz(4_b0nJbdFF?WofighA4gf{uB!m1ufd3f~5-2GdIgEmmikkR9^$CCk0)>*0LdnQT zNr_Jf6Ym403}kQ~aTRh#Ju4Wm2a`l-Vm1Ze#qw5W{lQKCbGPn2+ZD&_^Pw&w12zGRAd;<4z9>1`-w7l|Z zb!&U)>$lzSd;14JxF7)Z?^wk1-@$(2Vjyynkdi`4VL!MaB)-IeGLVw-h?B!r^k7yV zjJy(|6igQrv&&m4`OfKYGT*v0NX5c0`SIk|547LO{u)@=|B38>!T!O818ATSV)CF2 zfHLs?K=648l~BZHX84+vGWm+{_Y~Yhim_>M)3EaH;@s34J4O~hXY**NM)@P{5C|-P zz5xQQYa1ZIl|>g8wG0BkUd|z$m_AFmTRm{ZH3I@$tH6q2Df*Xd|3BA1Wc;UkwLTyU zi}G8@@Nar{@qo#H$La$)yE82{JOun;O@-sC`l1l^;!Id&XYg8r&MijF)| zEB+*3+2vZ}g9|b$5^rd%NxMGXCnmVTcH9;MnfVx@BrBCYr@JqZ!43jthOY=wrsYL` zW*VdGLB|)d3!aDvZ3FyH!j?&JH6zFfTnE9>^DT?cPML8JvlJ-(@DnxJdbw|I2Rj>E z!f$qyrxjY}AzuRSXx?Vumd=q&noi-%edHyUfe4%5Zjv=WT=u$Ot=!uc{)y4Z9CHy*kuhp(*LjEnTN zw|8*iLKF|?-1{;Hzt9~U+gFc(b3nNtB}sVd*M>{l)zsA-QWdkZP`~V9R}hr$MG9L& zTSzn(EO*92FCd!X!g%ZvnaJbZB!#|4L~6kTtl>WLu6Orm+_SESRUkmCs&EUh-B49G zVj!cP=+9Y38UPoiSDt46G`x}){O+2Xr07<^qOoX+5dPi6?2B@Ea!FYP40-QS8osT8 zJLy2hGJB)+R%1QSxPMYd>tMrH_*HjV0XdieH?qTA7V9e2U$YC>z9q$4CMKHVb%QLS z!}d@|F`b-ED31Kj1fqCNqa&a*Z?2iaY<0eO#>9)GCpL59W%%`nF)>2or{!a(8cska zTL(Csk9Zr-?$%+?cXuvmF9UW7ZBkollg7YguK$b zQaJ2zu#*}kq64FhyZ7NLsX1!ooBgP3RqS<>%63~9Uk+T3=pav`mh_UsLvd89wcN@X z5Qvh>+|xJ`&tJ_}>=F4W!enV56mj3;ZB%?`(!u+sp-W{lw4qKt7o$^NCA zk7@Id!q&#UKesTGn5@e8@tgAuNv^ETC5!SLO6Lf7^u|yvUe=3&4)AZom>^5i`f4xs zI6B{Os0LWGD_C6oj;Xw`t)Nk>54bAl^{?!qvaxD1Ann~fl(%^I$6MA`-^h<`+VH3$$huo zn8+BCi-$EJP|P-2yS|gYWmxPTYi&5(#F1~&o?Eh1bUJD3g@nYUYk6|JwOco}tSnlSKC+wud_}wwv0-Y_@BiXYYL{rl+_)+p%W%z<|NbC0-LS5#2p+ z#3xP%0y5q2jhf{P}4$Nb@^5^Ged>><;dRZ0$61)g!Bv+TB^Q51QO4abX^Q}sB z<&BAGO1<@yL6fn2G4PIjE^9oZMHUH(_BADc61cljW#)G1omyUZjHlhC-7}|0eMTkT z8!#sW>{rrCi=>-_b8lx_`$P@RYztJYUnvsO%H{Cn>_EKP?DYJu=4EK4BtOKduDv(^ zb|gW=b)#;Fo#l*py8F%g&jUjxS7FL?v-^-K5EwVs2Z5o9qO4MMYx6d=p4j6`b3q`t z(pcpJ8I#@x!z^LbuhH>G?fq7Df+VOMJTB;$k>=}a?a%7 zm8n$=QLIklHzFKdZ^dya74RO|O=gps6?A^FNpK>{^$Uo($|hfjlYObV17qV_vz|zu zuvX*=c#EhQ_1TkkAYcSjG;YSuJ08l%ii9fU{1qXJ$vr{fXZDppEqjxU*y=&xr-bDE zte+PXG4+2+NBl1We$czXb|9LRb}Cgkr#@r(d&RpQ-P*vWB*_>Ztl{DN0Ej8k89&_d z&jOJ_L(B|oJF)%I603Dk+sr$1ZeX7wh`6rhq}wr5b*-UtWEgQbenAo?nDtkJMwcAj z9sLmm4#_9cE4d{N9h>$?58t4OW_770Zpf2`nH{afchQHaFlJI`bARj%c{-y%a)Qt;K;7 z$LMXMmvBX0tZnR*w|&|DtK;NK63vY%;mQ*OIR2~`%KH352A+tSgv-A}w#=eA8HQ2=r)R$;~tYQ-R;bTosrUlgFVhJuK z`B93^nhLM@HE{>p+LWcWok#uKJFx_#wZn5qW*!?CxQHgEl>!0%c!ELmp&@E>*y5WY z2rO!YK(#UE69GCh)**i-Zv| zl=e6??~`dhuP6K*39-GCl(=@jGw$jdOpwnFGHZ;-iP??^_D8%kZsTh?wL8jH(i`L1 zp7DZs*-vSWKfQxrZTQzZsaTUWQFgT$lWE=5ZkU(R_NANzzh0U{`#jU&xR{hTh!H7L zMx`m%nwk%9Q9K<*;)>S%OH!Rmx~4AE)1hBx|Hwgf)*lf4j%KLF<}iY>>8{%wIG%XgCWil2= zGe}1ShQ6Vtd029-J?%nm8lq%_>XVG7Y^;*Xhat^2u}>yzG0jARY_1Jw}4&a(MF> zW+xDMjtP;c+Pl|<-oAQ7bfA^lt7CTT?s3qkd5aM9GowLM2UMGCq^jD07$$lYfpB`id0xBZ(1Q6&4fzEtl`|#L` zI3}%9J|upufB<_I-QBS+c85c?;vQk6VVvXO6EmIKCfg+3Y_D=d>e?A?X*yLJdi^tq zAX_WXqSfJ9T{LI)WNSHDa!H%~Z@GZqrAzHDli@d97Ch6(u7Cgy9#4Nj>45%Da3e@* z9G#1gQC>Nj4Fa?K&3jnjPECgBkc$*8yLKQ)bf5w~Lto+XGqFjL@z!c4%wkAnge)@7 zU$%R&`lhlb7IS!f`lwH++wNxcc8~Bi^{01Tjp^<`3Onx%4b4>f6G;w%t*aCD6;ABi z8%MK8w?pK1x0cd-ZmE?Fy>nhS)#%Os9YF&j&ekrw*G>pCMID2{QxJ$Hmf%m27Z7*$1}+eA zL)E&c4pvuZjceZ|%?Dn$PLtKE7~D`lK18J~2j?xWJ-RLyJrZ(|J zk@SqJm?AQSlG*<9UUWgbT_&#fAg;jEt#HC(lDaWGnMrkN<3=SsH#$#ca@^SP7nDEc z%jyc=g~z7yMD>@1R`1;%WPnR9#!k%&{s^FH_v9Q%>~w#!pzp@ykn)DVdGxGH9^)!Y zR-;t0uaJv(y|#n~-vck6OOWzfG_c0D+Wc3{XxuR)GA!jHO_=F93!O&Wqe~)BoSn$V zoI(j%KkIG>=yIS?`I0S|X2TmS&DH>IRm1DfT-VtNpOiadDQ?|CUmm_c5!9=DEnysi z{R<9J7=W+La7W>S-41nx`ZVpmSc*7AT9WLZ(oE=z)GE;S=EVf%APSCD@I}NL=5*xZ zDXU5E%A0!KmF!M}IkoE)A}fFrj-vbq`@l&2XY(IZhmDBxqM|JEDlfc3)>DTuu8(EL z+f`>Eur2cG!azXtgA1<-X=KfF^#W;0+-7Z@VB6s=Scl=R{~VYCbsa)S~>W{zWUzw2qYyGt5Jh kjp4C*6&2w#>M=>Vi6lu9kWP)PELyD}f2{tCPzERd1|6fZ+W-In 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 index cde572c63..000000000 --- a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Netgen.html +++ /dev/null @@ -1,681 +0,0 @@ - - - - - - Main Page - - - - -  - - - -

    -

    smesh.Mesh_Netgen Class Reference

    Class to define a NETGEN-based 2D or 3D algorithm that need no discrete boundary (i.e. -More... -

    -Inheritance diagram for smesh.Mesh_Netgen:

    Inheritance graph
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Public Member Functions

    def __init__
     Private constructor.
    def Parameters
     Define hypothesis containing parameters of the algorithm.
    def GetSubMesh
     If the algorithm is global, return 0;
    - else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     is3D
     mesh
     geom
     subm
     algo

    Static Public Attributes

    int is3D = 0
    int mesh = 0
    int geom = 0
    int subm = 0
    int algo = 0
    -

    Detailed Description

    -independent)

    -This class is deprecated, only for compatibility!

    -More details. -

    -


    Member Function Documentation

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Netgen.__init__   self,
      mesh,
      is3D,
      geom = 0
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Netgen.Parameters   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetSubMesh   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetAlgorithm   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetCompatibleHypothesis   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetName   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.SetName   self,
      name
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetId   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Create   self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Hypothesis   self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -


    Field Documentation

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Netgen.is3D = 0 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Netgen.is3D
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.mesh = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.mesh [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.geom = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_Segment.

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.geom [inherited]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_Segment.

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.subm = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.subm [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.algo = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.algo [inherited]
    -
    - - - - - -
    -   - - -

    -

    - - 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 index d82cacddc9186f4ebd5d54f3c6afc5cc892726ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5126 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 E05smdbN~PV diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Prism3D.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Prism3D.html deleted file mode 100644 index a3b06f9de..000000000 --- a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Prism3D.html +++ /dev/null @@ -1,592 +0,0 @@ - - - - - - Main Page - - - - -  - - - -

    -

    smesh.Mesh_Prism3D Class Reference

    Class to define a 3D extrusion algorithm. -More... -

    -Inheritance diagram for smesh.Mesh_Prism3D:

    Inheritance graph
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Public Member Functions

    def __init__
     Private constructor.
    def GetSubMesh
     If the algorithm is global, return 0;
    - else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     mesh
     geom
     subm
     algo

    Static Public Attributes

    int mesh = 0
    int geom = 0
    int subm = 0
    int algo = 0
    -

    Detailed Description

    -More details. -

    -


    Member Function Documentation

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Prism3D.__init__   self,
      mesh,
      geom = 0
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetSubMesh   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetAlgorithm   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetCompatibleHypothesis   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetName   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.SetName   self,
      name
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetId   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Create   self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Hypothesis   self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -


    Field Documentation

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.mesh = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.mesh [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.geom = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_Segment.

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.geom [inherited]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_Segment.

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.subm = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.subm [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.algo = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.algo [inherited]
    -
    - - - - - -
    -   - - -

    -

    - - diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Prism3D__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Prism3D__inherit__graph.jpg deleted file mode 100644 index fdf7cb8c1fb7450da7dc6aa32bff84b0ebba5509..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5214 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 diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Projection1D.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Projection1D.html deleted file mode 100644 index 94c282715..000000000 --- a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Projection1D.html +++ /dev/null @@ -1,658 +0,0 @@ - - - - - - Main Page - - - - -  - - - -

    -

    smesh.Mesh_Projection1D Class Reference

    Class to define a projection 1D algorithm. -More... -

    -Inheritance diagram for smesh.Mesh_Projection1D:

    Inheritance graph
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Public Member Functions

    def __init__
     Private constructor.
    def SourceEdge
     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).
    def GetSubMesh
     If the algorithm is global, return 0;
    - else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     mesh
     geom
     subm
     algo

    Static Public Attributes

    int mesh = 0
    int geom = 0
    int subm = 0
    int algo = 0
    -

    Detailed Description

    -More details. -

    -


    Member Function Documentation

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Projection1D.__init__   self,
      mesh,
      geom = 0
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Projection1D.SourceEdge   self,
      edge,
      mesh = None,
      srcV = None,
      tgtV = None
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - - -
    edge to take nodes distribution from
    mesh to take nodes distribution from (optional)
    srcV is vertex of edge to associate with tgtV (optional)
    tgtV is vertex of the edge where the algorithm is assigned, to associate with srcV (optional)
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetSubMesh   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetAlgorithm   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetCompatibleHypothesis   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetName   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.SetName   self,
      name
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetId   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Create   self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Hypothesis   self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -


    Field Documentation

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.mesh = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.mesh [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.geom = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_Segment.

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.geom [inherited]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_Segment.

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.subm = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.subm [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.algo = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.algo [inherited]
    -
    - - - - - -
    -   - - -

    -

    - - diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Projection1D__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Projection1D__inherit__graph.jpg deleted file mode 100644 index 8d038d0b0ed8efb1036d9afadab66e0542f404df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5481 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 q?Ep@&5pp0BkV; diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Projection2D.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Projection2D.html deleted file mode 100644 index f2985f61a..000000000 --- a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Projection2D.html +++ /dev/null @@ -1,672 +0,0 @@ - - - - - - Main Page - - - - -  - - - -

    -

    smesh.Mesh_Projection2D Class Reference

    Class to define a projection 2D algorithm. -More... -

    -Inheritance diagram for smesh.Mesh_Projection2D:

    Inheritance graph
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Public Member Functions

    def __init__
     Private constructor.
    def SourceFace
     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).
    def GetSubMesh
     If the algorithm is global, return 0;
    - else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     mesh
     geom
     subm
     algo

    Static Public Attributes

    int mesh = 0
    int geom = 0
    int subm = 0
    int algo = 0
    -

    Detailed Description

    -More details. -

    -


    Member Function Documentation

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Projection2D.__init__   self,
      mesh,
      geom = 0
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Projection2D.SourceFace   self,
      face,
      mesh = None,
      srcV1 = None,
      tgtV1 = None,
      srcV2 = None,
      tgtV2 = None
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - - - - -
    face to take mesh pattern from
    mesh to take mesh pattern from (optional)
    srcV1 is vertex of face to associate with tgtV1 (optional)
    tgtV1 is vertex of the face where the algorithm is assigned, to associate with srcV1 (optional)
    srcV2 is vertex of face to associate with tgtV1 (optional)
    tgtV2 is vertex of the face where the algorithm is assigned, to associate with srcV2 (optional)
    -
    -Note: association vertices must belong to one edge of a face
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetSubMesh   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetAlgorithm   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetCompatibleHypothesis   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetName   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.SetName   self,
      name
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetId   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Create   self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Hypothesis   self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -


    Field Documentation

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.mesh = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.mesh [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.geom = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_Segment.

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.geom [inherited]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_Segment.

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.subm = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.subm [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.algo = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.algo [inherited]
    -
    - - - - - -
    -   - - -

    -

    - - diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Projection2D__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Projection2D__inherit__graph.jpg deleted file mode 100644 index 0433234b9c329026ee75052331169f6e15342e32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5484 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 diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Projection3D.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Projection3D.html deleted file mode 100644 index 9393e9fd7..000000000 --- a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Projection3D.html +++ /dev/null @@ -1,672 +0,0 @@ - - - - - - Main Page - - - - -  - - - -

    -

    smesh.Mesh_Projection3D Class Reference

    Class to define a projection 3D algorithm. -More... -

    -Inheritance diagram for smesh.Mesh_Projection3D:

    Inheritance graph
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Public Member Functions

    def __init__
     Private constructor.
    def SourceShape3D
     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).
    def GetSubMesh
     If the algorithm is global, return 0;
    - else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     mesh
     geom
     subm
     algo

    Static Public Attributes

    int mesh = 0
    int geom = 0
    int subm = 0
    int algo = 0
    -

    Detailed Description

    -More details. -

    -


    Member Function Documentation

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Projection3D.__init__   self,
      mesh,
      geom = 0
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Projection3D.SourceShape3D   self,
      solid,
      mesh = 0,
      srcV1 = 0,
      tgtV1 = 0,
      srcV2 = 0,
      tgtV2 = 0
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - - - - -
    solid to take mesh pattern from
    mesh to take mesh pattern from (optional)
    srcV1 is vertex of solid to associate with tgtV1 (optional)
    tgtV1 is vertex of the solid where the algorithm is assigned, to associate with srcV1 (optional)
    srcV2 is vertex of solid to associate with tgtV1 (optional)
    tgtV2 is vertex of the solid where the algorithm is assigned, to associate with srcV2 (optional)
    -
    -Note: association vertices must belong to one edge of a solid
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetSubMesh   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetAlgorithm   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetCompatibleHypothesis   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetName   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.SetName   self,
      name
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetId   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Create   self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Hypothesis   self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -


    Field Documentation

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.mesh = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.mesh [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.geom = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_Segment.

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.geom [inherited]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_Segment.

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.subm = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.subm [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.algo = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.algo [inherited]
    -
    - - - - - -
    -   - - -

    -

    - - diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Projection3D__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Projection3D__inherit__graph.jpg deleted file mode 100644 index 17aaff1567f923abe64548fa60eb6361b7e181ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5485 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 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 index 6cf4f44f2..000000000 --- a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Quadrangle.html +++ /dev/null @@ -1,623 +0,0 @@ - - - - - - Main Page - - - - -  - - - -

    -

    smesh.Mesh_Quadrangle Class Reference

    Class to define a quadrangle 2D algorithm. -More... -

    -Inheritance diagram for smesh.Mesh_Quadrangle:

    Inheritance graph
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Public Member Functions

    def __init__
     Private constructor.
    def QuadranglePreference
     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 GetSubMesh
     If the algorithm is global, return 0;
    - else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     mesh
     geom
     subm
     algo

    Static Public Attributes

    int mesh = 0
    int geom = 0
    int subm = 0
    int algo = 0
    -

    Detailed Description

    -More details. -

    -


    Member Function Documentation

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Quadrangle.__init__   self,
      mesh,
      geom = 0
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Quadrangle.QuadranglePreference   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetSubMesh   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetAlgorithm   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetCompatibleHypothesis   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetName   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.SetName   self,
      name
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetId   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Create   self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Hypothesis   self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -


    Field Documentation

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.mesh = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.mesh [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.geom = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_Segment.

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.geom [inherited]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_Segment.

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.subm = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.subm [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.algo = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.algo [inherited]
    -
    - - - - - -
    -   - - -

    -

    - - 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 index 38172d20022bc6d8654f1f6c5d93855a64a42a29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5392 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 - - - - - Main Page - - - - -  - - - -

    -

    smesh.Mesh_RadialPrism3D Class Reference

    Class to define a Radial Prism 3D algorithm. -More... -

    -Inheritance diagram for smesh.Mesh_RadialPrism3D:

    Inheritance graph
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Public Member Functions

    def __init__
     Private constructor.
    def Get3DHypothesis
     Return 3D hypothesis holding the 1D one.
    def OwnHypothesis
     Private method creating 1D hypothes and storing it in the LayerDistribution hypothes.
    def NumberOfLayers
     Define "NumberOfLayers" hypothesis, specifying a number of layers of prisms to build between the inner and outer shells.
    def LocalLength
     Define "LocalLength" hypothesis, specifying segment length to build between the inner and outer shells.
    def NumberOfSegments
     Define "NumberOfSegments" hypothesis, specifying a number of layers of prisms to build between the inner and outer shells.
    def Arithmetic1D
     Define "Arithmetic1D" hypothesis, specifying distribution of segments to build between the inner and outer shells as arithmetic length increasing.
    def StartEndLength
     Define "StartEndLength" hypothesis, specifying distribution of segments to build between the inner and outer shells as geometric length increasing.
    def AutomaticLength
     Define "AutomaticLength" hypothesis, specifying number of segments to build between the inner and outer shells.
    def GetSubMesh
     If the algorithm is global, return 0;
    - else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     distribHyp
     nbLayers
     mesh
     geom
     subm
     algo

    Static Public Attributes

    int mesh = 0
    int geom = 0
    int subm = 0
    int algo = 0
    -

    Detailed Description

    -More details. -

    -


    Member Function Documentation

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_RadialPrism3D.__init__   self,
      mesh,
      geom = 0
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_RadialPrism3D.Get3DHypothesis   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_RadialPrism3D.OwnHypothesis   self,
      hypType,
      args = [],
      so = "libStdMeshersEngine.so"
    -
    - - - - - -
    -   - - -

    -Returns the created hypothes

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_RadialPrism3D.NumberOfLayers   self,
      n
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_RadialPrism3D.LocalLength   self,
      l
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    l for the length of segments
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_RadialPrism3D.NumberOfSegments   self,
      n,
      s = []
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    n for the number of segments
    s for the scale factor (optional)
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_RadialPrism3D.Arithmetic1D   self,
      start,
      end
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    start for the length of the first segment
    end for the length of the last segment
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_RadialPrism3D.StartEndLength   self,
      start,
      end
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    start for the length of the first segment
    end for the length of the last segment
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_RadialPrism3D.AutomaticLength   self,
      fineness = 0
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    fineness for the fineness [0-1]
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetSubMesh   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetAlgorithm   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetCompatibleHypothesis   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetName   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.SetName   self,
      name
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetId   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Create   self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Hypothesis   self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -


    Field Documentation

    -

    - - - - -
    - - - - -
    smesh.Mesh_RadialPrism3D.distribHyp
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_RadialPrism3D.nbLayers
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.mesh = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.mesh [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.geom = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_Segment.

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.geom [inherited]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_Segment.

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.subm = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.subm [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.algo = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.algo [inherited]
    -
    - - - - - -
    -   - - -

    -

    - - diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__RadialPrism3D__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__RadialPrism3D__inherit__graph.jpg deleted file mode 100644 index 326430da532b6470d8b993cb579843efa78806fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5774 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 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 index fa5868ad0..000000000 --- a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Segment.html +++ /dev/null @@ -1,974 +0,0 @@ - - - - - - Main Page - - - - -  - - - -

    -

    smesh.Mesh_Segment Class Reference

    Class to define a segment 1D algorithm for discretization. -More... -

    -Inheritance diagram for smesh.Mesh_Segment:

    Inheritance graph
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Public Member Functions

    def __init__
     Private constructor.
    def LocalLength
     Define "LocalLength" hypothesis to cut an edge in several segments with the same length.
    def NumberOfSegments
     Define "NumberOfSegments" hypothesis to cut an edge in several fixed number of segments.
    def Arithmetic1D
     Define "Arithmetic1D" hypothesis to cut an edge in several segments with arithmetic length increasing.
    def StartEndLength
     Define "StartEndLength" hypothesis to cut an edge in several segments with geometric length increasing.
    def Deflection1D
     Define "Deflection1D" hypothesis.
    def Propagation
     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 AutomaticLength
     Define "AutomaticLength" hypothesis.
    def LengthNearVertex
     Define "SegmentLengthAroundVertex" hypothesis.
    def QuadraticMesh
     Define "QuadraticMesh" hypothesis, forcing construction of quadratic edges.
    def GetSubMesh
     If the algorithm is global, return 0;
    - else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     geom
     mesh
     subm
     algo

    Static Public Attributes

    int mesh = 0
    int subm = 0
    int algo = 0
    -

    Detailed Description

    -More details. -

    -


    Member Function Documentation

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment.__init__   self,
      mesh,
      geom = 0
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_CompositeSegment, and smesh.Mesh_Segment_Python.

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment.LocalLength   self,
      l
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    l for the length of segments that cut an edge
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment.NumberOfSegments   self,
      n,
      s = []
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    n for the number of segments that cut an edge
    s for the scale factor (optional)
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment.Arithmetic1D   self,
      start,
      end
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    start for the length of the first segment
    end for the length of the last segment
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment.StartEndLength   self,
      start,
      end
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    start for the length of the first segment
    end for the length of the last segment
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment.Deflection1D   self,
      d
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    d for the deflection
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Segment.Propagation   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment.AutomaticLength   self,
      fineness = 0
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    fineness for the fineness [0-1]
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment.LengthNearVertex   self,
      length,
      vertex = 0
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    length for the segment length
    vertex for the length localization: vertex index [0,1] | verext object
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Segment.QuadraticMesh   self  ) 
    -
    - - - - - -
    -   - - -

    -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 smesh.Mesh_Algorithm.GetSubMesh   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetAlgorithm   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetCompatibleHypothesis   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetName   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.SetName   self,
      name
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetId   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Create   self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Hypothesis   self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -


    Field Documentation

    -

    - - - - -
    - - - - -
    smesh.Mesh_Segment.geom
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented from smesh.Mesh_Algorithm.

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.mesh = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.mesh [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.subm = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.subm [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.algo = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.algo [inherited]
    -
    - - - - - -
    -   - - -

    -

    - - 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 index 4107fa168..000000000 --- a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Segment__Python.html +++ /dev/null @@ -1,1025 +0,0 @@ - - - - - - Main Page - - - - -  - - - -

    -

    smesh.Mesh_Segment_Python Class Reference

    Class to define a segment 1D algorithm for discretization with python function. -More... -

    -Inheritance diagram for smesh.Mesh_Segment_Python:

    Inheritance graph
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Public Member Functions

    def __init__
     Private constructor.
    def PythonSplit1D
     Define "PythonSplit1D" hypothesis based on the Erwan Adam patch, awaiting equivalent SALOME functionality.
    def LocalLength
     Define "LocalLength" hypothesis to cut an edge in several segments with the same length.
    def NumberOfSegments
     Define "NumberOfSegments" hypothesis to cut an edge in several fixed number of segments.
    def Arithmetic1D
     Define "Arithmetic1D" hypothesis to cut an edge in several segments with arithmetic length increasing.
    def StartEndLength
     Define "StartEndLength" hypothesis to cut an edge in several segments with geometric length increasing.
    def Deflection1D
     Define "Deflection1D" hypothesis.
    def Propagation
     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 AutomaticLength
     Define "AutomaticLength" hypothesis.
    def LengthNearVertex
     Define "SegmentLengthAroundVertex" hypothesis.
    def QuadraticMesh
     Define "QuadraticMesh" hypothesis, forcing construction of quadratic edges.
    def GetSubMesh
     If the algorithm is global, return 0;
    - else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     geom
     mesh
     subm
     algo

    Static Public Attributes

    int mesh = 0
    int subm = 0
    int algo = 0
    -

    Detailed Description

    -More details. -

    -


    Member Function Documentation

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment_Python.__init__   self,
      mesh,
      geom = 0
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented from smesh.Mesh_Segment.

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment_Python.PythonSplit1D   self,
      n,
      func
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    n for the number of segments that cut an edge
    func for the python function that calculate the length of all segments
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment.LocalLength   self,
      l
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    l for the length of segments that cut an edge
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment.NumberOfSegments   self,
      n,
      s = []
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    n for the number of segments that cut an edge
    s for the scale factor (optional)
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment.Arithmetic1D   self,
      start,
      end
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    start for the length of the first segment
    end for the length of the last segment
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment.StartEndLength   self,
      start,
      end
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    start for the length of the first segment
    end for the length of the last segment
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment.Deflection1D   self,
      d
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    d for the deflection
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Segment.Propagation   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment.AutomaticLength   self,
      fineness = 0
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    fineness for the fineness [0-1]
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Segment.LengthNearVertex   self,
      length,
      vertex = 0
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - -
    length for the segment length
    vertex for the length localization: vertex index [0,1] | verext object
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Segment.QuadraticMesh   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -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 smesh.Mesh_Algorithm.GetSubMesh   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetAlgorithm   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetCompatibleHypothesis   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetName   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.SetName   self,
      name
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetId   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Create   self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Hypothesis   self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -


    Field Documentation

    -

    - - - - -
    - - - - -
    smesh.Mesh_Segment.geom [inherited]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented from smesh.Mesh_Algorithm.

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.mesh = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.mesh [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.subm = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.subm [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.algo = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.algo [inherited]
    -
    - - - - - -
    -   - - -

    -

    - - 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 index 68ae8f3e629c65d771e3326115c6e87c4f2c3fbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7802 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 @ z1kt2fdNVF*VAT$rSh^DoWXM$W(A1T{sy%k`UTDQ3^eHTpXD;9^$rk|^gFk;-Mp#l9 z5a{Y9b+&Rehe#`38Lx_z77pmm;9xUs1u-Y{1FdTFE~n*M^ zCAv^0Cpil=D4HTC`qWNM(%G<`&gF}~H^pJOshnpSDa4tUX=Y~K@BRHFeS~}?=TaR8 zq!gTQN7Ns_em+r_AK4T2fYs5@QYX@lMI57I@eYd%ML|IuL)Z^l-2G4EIe{e}kc_<& zHV-nn95VI^=$7_Jo-CCCbvbF7s#;T$ZC|0I79XK}AL4H2`notTY(i0rNWIrRoe&Ds z7TqM8=)fA<*#-mql0y=0zZ zG5DxL%?g+x*!Z6}%cRg);I zwx6gl#`vghFbguqP{!QpbnoeIvox|7&1p?tyW9-FTPp0$LtW!h*O`qxeR!MpLwQTl=xs_#RjKM ze`**P`b^Yu*627s)@(7hxAJ8xO3EAYFRvI9FKV8Ho`GuOk5RL znT9s2?t?|ukmVr5KXm&NvAq_yE24AY>cb8tG0yG`Z2 z$j;4x_jCV{VQaB7&lx3g#~t$oJeEvNhqL#Bh7=-INX~!9hcz~+h?AN%{wv`1;i*P#l4cS_ z#miU$*GK|GN^w0w-Iwm|%bU*~KHBY<1z~>lD>mf?O|#iHNfOWd=mwf?K52B!S12AN ziiHixlU8gg3+~1~Jl?%bPbpg9nmSjROKD&g51W{- z5E$tF;I-*1UYOmD5t5zq|^tQ21eg?~_)>1p}$ioq)p$5@Vs+z2s zec`RM-mXIT#-{4d<2|!hou%O5?iSV;U`Shu-{F6bjsLt{1oC4j@qt~oa3ixHYWz;9nqquW= zoTL8bVq16jR~q^kAr=HD?Cf1sAKfc)v^?G`&DOJcylKY?5Ow2r{&hn6dv^XuA||4Sbra4aS{t1a ziEYLh<}FLjxHEGKuFlJ)G}J3DM?Lhf9(8|RBfh^z?9=b00s7rhYY%BltE!B8yz{6Z z7rIj2qG&7e(kLmS1w%2x*5HV%RG{H+xnB^f9R6AjC2b6p*pGx@zn#iIlK20T!@xgN zd2jmX;vcN|8;poZ$%A$B$f7!yo?Z8pa*MIn)kIO3Z8XIy2@ViTp3E^9A>?#KuNl)( zShJp@Zd}WA*=se1!{3mBhIBA1m&JsO!&4nqpTH;9Z%H - - - - - Main Page - - - - -  - - - -

    -

    smesh.Mesh_Tetrahedron Class Reference

    Class to define a tetrahedron 3D algorithm. -More... -

    -Inheritance diagram for smesh.Mesh_Tetrahedron:

    Inheritance graph
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Public Member Functions

    def __init__
     Private constructor.
    def MaxElementVolume
     Define "MaxElementVolume" hypothesis to give the maximun volume of each tetrahedral.
    def Parameters
     Define "Netgen 3D Parameters" hypothesis.
    def SetMaxSize
     Set MaxSize.
    def SetSecondOrder
     Set SecondOrder flag.
    def SetOptimize
     Set Optimize flag.
    def SetFineness
     Set Fineness.
    def SetGrowthRate
     Set GrowthRate.
    def SetNbSegPerEdge
     Set NbSegPerEdge.
    def SetNbSegPerRadius
     Set NbSegPerRadius.
    def GetSubMesh
     If the algorithm is global, return 0;
    - else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     algoType
     params
     mesh
     geom
     subm
     algo

    Static Public Attributes

    int params = 0
    int algoType = 0
    int mesh = 0
    int geom = 0
    int subm = 0
    int algo = 0
    -

    Detailed Description

    -More details. -

    -


    Member Function Documentation

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Tetrahedron.__init__   self,
      mesh,
      algoType,
      geom = 0
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Tetrahedron.MaxElementVolume   self,
      vol
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    vol for the maximum volume of each tetrahedral
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Tetrahedron.Parameters   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Tetrahedron.SetMaxSize   self,
      theSize
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Tetrahedron.SetSecondOrder   self,
      theVal
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Tetrahedron.SetOptimize   self,
      theVal
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Tetrahedron.SetFineness   self,
      theFineness
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    theFineness is: VeryCoarse, Coarse, Moderate, Fine, VeryFine or Custom
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Tetrahedron.SetGrowthRate   self,
      theRate
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Tetrahedron.SetNbSegPerEdge   self,
      theVal
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Tetrahedron.SetNbSegPerRadius   self,
      theVal
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetSubMesh   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetAlgorithm   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetCompatibleHypothesis   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetName   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.SetName   self,
      name
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetId   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Create   self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Hypothesis   self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -


    Field Documentation

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Tetrahedron.params = 0 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Tetrahedron.algoType = 0 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Tetrahedron.algoType
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Tetrahedron.params
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.mesh = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.mesh [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.geom = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_Segment.

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.geom [inherited]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_Segment.

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.subm = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.subm [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.algo = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.algo [inherited]
    -
    - - - - - -
    -   - - -

    -

    - - 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 index 78d01b1be45e54c5984b4a7914c0b550a482a80e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5448 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 E2X8%`umAu6 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 index 7046b0ebf..000000000 --- a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Triangle.html +++ /dev/null @@ -1,1130 +0,0 @@ - - - - - - Main Page - - - - -  - - - -

    -

    smesh.Mesh_Triangle Class Reference

    Class to define a triangle 2D algorithm. -More... -

    -Inheritance diagram for smesh.Mesh_Triangle:

    Inheritance graph
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Public Member Functions

    def __init__
     Private constructor.
    def MaxElementArea
     Define "MaxElementArea" hypothesis to give the maximun area of each triangles.
    def LengthFromEdges
     Define "LengthFromEdges" hypothesis to build triangles based on the length of the edges taken from the wire.
    def Parameters
     Define "Netgen 2D Parameters" hypothesis.
    def SetMaxSize
     Set MaxSize.
    def SetSecondOrder
     Set SecondOrder flag.
    def SetOptimize
     Set Optimize flag.
    def SetFineness
     Set Fineness.
    def SetGrowthRate
     Set GrowthRate.
    def SetNbSegPerEdge
     Set NbSegPerEdge.
    def SetNbSegPerRadius
     Set NbSegPerRadius.
    def SetQuadAllowed
     Set QuadAllowed flag.
    def GetSubMesh
     If the algorithm is global, return 0;
    - else return the submesh associated to this algorithm.
    def GetAlgorithm
     Return the wrapped mesher.
    def GetCompatibleHypothesis
     Get list of hypothesis that can be used with this algorithm.
    def GetName
     Get name of algo.
    def SetName
     Set name to algo.
    def GetId
     Get id of algo.
    def Create
     Private method.
    def Hypothesis
     Private method.

    Data Fields

     algoType
     params
     mesh
     geom
     subm
     algo

    Static Public Attributes

    int algoType = 0
    int params = 0
    int mesh = 0
    int geom = 0
    int subm = 0
    int algo = 0
    -

    Detailed Description

    -More details. -

    -


    Member Function Documentation

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Triangle.__init__   self,
      mesh,
      algoType,
      geom = 0
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Triangle.MaxElementArea   self,
      area
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    area for the maximum area of each triangles
    -
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Triangle.LengthFromEdges   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Triangle.Parameters   self  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Triangle.SetMaxSize   self,
      theSize
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Triangle.SetSecondOrder   seld,
      theVal
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Triangle.SetOptimize   self,
      theVal
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Triangle.SetFineness   self,
      theFineness
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    theFineness is: VeryCoarse, Coarse, Moderate, Fine, VeryFine or Custom
    -
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Triangle.SetGrowthRate   self,
      theRate
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Triangle.SetNbSegPerEdge   self,
      theVal
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Triangle.SetNbSegPerRadius   self,
      theVal
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Triangle.SetQuadAllowed   self,
      toAllow
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetSubMesh   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetAlgorithm   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetCompatibleHypothesis   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetName   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.SetName   self,
      name
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.Mesh_Algorithm.GetId   self  )  [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Create   self,
      mesh,
      geom,
      hypo,
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.Mesh_Algorithm.Hypothesis   self,
      hyp,
      args = [],
      so = "libStdMeshersEngine.so"
    [inherited]
    -
    - - - - - -
    -   - - -

    -

    -


    Field Documentation

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Triangle.algoType = 0 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Triangle.params = 0 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Triangle.algoType
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Triangle.params
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.mesh = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.mesh [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.geom = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_Segment.

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.geom [inherited]
    -
    - - - - - -
    -   - - -

    - -

    -Reimplemented in smesh.Mesh_Segment.

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.subm = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.subm [inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Mesh_Algorithm.algo = 0 [static, inherited]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.Mesh_Algorithm.algo [inherited]
    -
    - - - - - -
    -   - - -

    -

    - - 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 index 30692a195cd3e1e5c9fc808c1801c3cab7d4ccd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5149 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 +  + + +

    Package smesh

    -Python package smesh defines several classes, destined for easy and -clear mesh creation and edition. -

    Example.
    -
    -

    +

    +

    +For available methods and classes please see documentation of +smeshDC package. +All methods of smeshDC package are accessible via smesh namespace, +for example "mesh = smesh.Mesh(shape, name)".

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Data Structures

    class  Mesh_Algorithm
     Mother class to define algorithm, recommended to don't use directly. More...
    class  Mesh_Segment
     Class to define a segment 1D algorithm for discretization. More...
    class  Mesh_CompositeSegment
     Class to define a segment 1D algorithm for discretization. More...
    class  Mesh_Segment_Python
     Class to define a segment 1D algorithm for discretization with python function. More...
    class  Mesh_Triangle
     Class to define a triangle 2D algorithm. More...
    class  Mesh_Quadrangle
     Class to define a quadrangle 2D algorithm. More...
    class  Mesh_Tetrahedron
     Class to define a tetrahedron 3D algorithm. More...
    class  Mesh_Hexahedron
     Class to define a hexahedron 3D algorithm. More...
    class  Mesh_Netgen
     Class to define a NETGEN-based 2D or 3D algorithm that need no discrete boundary (i.e. More...
    class  Mesh_Projection1D
     Class to define a projection 1D algorithm. More...
    class  Mesh_Projection2D
     Class to define a projection 2D algorithm. More...
    class  Mesh_Projection3D
     Class to define a projection 3D algorithm. More...
    class  Mesh_Prism3D
     Class to define a 3D extrusion algorithm. More...
    class  Mesh_RadialPrism3D
     Class to define a Radial Prism 3D algorithm. More...
    class  Mesh
     Class to define a mesh. More...

    Functions

    def GetName
     Gets object name.
    def SetName
     Sets name to object.
    def EnumToLong
     Returns long value from enumeration Uses for SMESH.FunctorType enumeration.
    def GetPointStruct
     Get PointStruct from vertex.
    def GetDirStruct
     Get DirStruct from vector.
    def GetAxisStruct
     Get AxisStruct from object.
    def SetEmbeddedMode
     Set the current mode.
    def IsEmbeddedMode
     Get the current mode.
    def SetCurrentStudy
     Set the current study.
    def GetCurrentStudy
     Get the current study.
    def CreateMeshesFromUNV
     Create Mesh object importing data from given UNV file.
    def CreateMeshesFromMED
     Create Mesh object(s) importing data from given MED file.
    def CreateMeshesFromSTL
     Create Mesh object importing data from given STL file.
    def GetSubShapesId
     From SMESH_Gen interface.
    def GetPattern
     From SMESH_Gen interface.
    def GetEmptyCriterion
     Creates an empty criterion.
    def GetCriterion
     Creates a criterion by given parameters.
    def GetFilter
     Creates filter by given parameters of criterion.
    def GetFunctor
     Creates numerical functor by its type.
    def TreatHypoStatus
     Print error message if a hypothesis was not assigned.

    Variables

    int noNETGENPlugin = 0
    int noNETGENPlugin = 1
    int REGULAR = 1
    int PYTHON = 2
    int COMPOSITE = 3
    int MEFISTO = 3
    int NETGEN = 4
    int GHS3D = 5
    int FULL_NETGEN = 6
     POINT = SMESH_MeshEditor.POINT
     AXIS = SMESH_MeshEditor.AXIS
     PLANE = SMESH_MeshEditor.PLANE
     LAPLACIAN_SMOOTH = SMESH_MeshEditor.LAPLACIAN_SMOOTH
     CENTROIDAL_SMOOTH = SMESH_MeshEditor.CENTROIDAL_SMOOTH
    int VeryCoarse = 0
    int Coarse = 1
    int Moderate = 2
    int Fine = 3
    int VeryFine = 4
    int Custom = 5
    string NO_NAME = "NoName"
    tuple smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
    -


    Function Documentation

    -

    - - - - -
    - - - - - - - - - -
    def smesh.GetName   obj  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.SetName   obj,
      name
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.EnumToLong   theItem  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.GetPointStruct   theVertex  ) 
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    theVertex is GEOM object(vertex)
    -
    -
    Returns:
    SMESH.PointStruct
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.GetDirStruct   theVector  ) 
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    theVector is GEOM object(vector)
    -
    -
    Returns:
    SMESH.DirStruct
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.GetAxisStruct   theObj  ) 
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    theObj is GEOM object(line or plane)
    -
    -
    Returns:
    SMESH.AxisStruct
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.SetEmbeddedMode   theMode  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - -
    def smesh.IsEmbeddedMode  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.SetCurrentStudy   theStudy  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - -
    def smesh.GetCurrentStudy  ) 
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - - -
    def smesh.CreateMeshesFromUNV   theFileName  ) 
    -
    - - - - - -
    -   - - -

    -

    Returns:
    an instance of Mesh class
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.CreateMeshesFromMED   theFileName  ) 
    -
    - - - - - -
    -   - - -

    -

    Returns:
    a list of Mesh class instances
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.CreateMeshesFromSTL   theFileName  ) 
    -
    - - - - - -
    -   - - -

    -

    Returns:
    an instance of Mesh class
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - -
    def smesh.GetSubShapesId   theMainObject,
      theListOfSubObjects
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - - - - - -
    def smesh.GetPattern  ) 
    -
    - - - - - -
    -   - - -

    -Creates pattern

    -

    - - - - -
    - - - - - - - - -
    def smesh.GetEmptyCriterion  ) 
    -
    - - - - - -
    -   - - -

    -

    Returns:
    SMESH.Filter.Criterion
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.GetCriterion   elementType,
      CritType,
      Compare = FT_EqualTo,
      Treshold = "",
      UnaryOp = FT_Undefined,
      BinaryOp = FT_Undefined
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - - - - -
    elementType is the type of elements(NODE, EDGE, FACE, VOLUME)
    CritType is type of criterion( FT_Taper, FT_Area, FT_RangeOfIds, FT_LyingOnGeom etc. )
    Compare belong to {FT_LessThan, FT_MoreThan, FT_EqualTo}
    Treshold is threshold value (range of ids as string, shape, numeric)
    UnaryOp is FT_LogicalNOT or FT_Undefined
    BinaryOp is binary logical operation FT_LogicalAND, FT_LogicalOR or FT_Undefined(must be for the last criterion in criteria)
    -
    -
    Returns:
    SMESH.Filter.Criterion
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.GetFilter   elementType,
      CritType = FT_Undefined,
      Compare = FT_EqualTo,
      Treshold = "",
      UnaryOp = FT_Undefined
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - - - - - -
    elementType is the type of elements in the group
    CritType is type of criterion( FT_Taper, FT_Area, FT_RangeOfIds, FT_LyingOnGeom etc. )
    Compare belong to {FT_LessThan, FT_MoreThan, FT_EqualTo}
    Treshold is threshold value (range of id ids as string, shape, numeric)
    UnaryOp is FT_LogicalNOT or FT_Undefined
    -
    -
    Returns:
    SMESH_Filter
    -
    -

    - - - - -
    - - - - - - - - - -
    def smesh.GetFunctor   theCriterion  ) 
    -
    - - - - - -
    -   - - -

    -

    Parameters:
    - - -
    theCrierion is FT_...; functor type
    -
    -
    Returns:
    SMESH_NumericalFunctor
    -
    -

    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def smesh.TreatHypoStatus   status,
      hypName,
      geomName,
      isAlgo
    -
    - - - - -
    -   - - -

    -


    Variable Documentation

    -

    - - - - -
    - - - - -
    int smesh.noNETGENPlugin = 0 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.noNETGENPlugin = 1 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.REGULAR = 1 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.PYTHON = 2 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.COMPOSITE = 3 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.MEFISTO = 3 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.NETGEN = 4 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.GHS3D = 5 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.FULL_NETGEN = 6 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.POINT = SMESH_MeshEditor.POINT [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.AXIS = SMESH_MeshEditor.AXIS [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.PLANE = SMESH_MeshEditor.PLANE [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.LAPLACIAN_SMOOTH = SMESH_MeshEditor.LAPLACIAN_SMOOTH [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    smesh.CENTROIDAL_SMOOTH = SMESH_MeshEditor.CENTROIDAL_SMOOTH [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.VeryCoarse = 0 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Coarse = 1 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Moderate = 2 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Fine = 3 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.VeryFine = 4 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - - - - -
    int smesh.Custom = 5 [static]
    -
    - - - - - -
    -   - - -

    -

    -

    - - - - -
    - + +
    +
    +
    - +
    string smesh.NO_NAME = "NoName" [static] tuple smesh.smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") [static]
    -
    - - - - - -
    -   - + +

    -

    -

    - - - - -
    - - - - -
    tuple smesh.smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") [static]
    -
    - - - - - -
    -   - -

    -

    + +

    + +

    diff --git a/doc/salome/gui/SMESH/smeshpy_doc/namespacesmeshDC.html b/doc/salome/gui/SMESH/smeshpy_doc/namespacesmeshDC.html new file mode 100644 index 000000000..ba523db16 --- /dev/null +++ b/doc/salome/gui/SMESH/smeshpy_doc/namespacesmeshDC.html @@ -0,0 +1,530 @@ + + + + + + Main Page + + + + +  + + + +

    Package smeshDC

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Structures

    class  smeshDC
    class  Mesh_Algorithm
     Mother class to define algorithm, recommended to don't use directly. More...
    class  Mesh_Segment
     Class to define a segment 1D algorithm for discretization. More...
    class  Mesh_CompositeSegment
     Class to define a segment 1D algorithm for discretization. More...
    class  Mesh_Segment_Python
     Class to define a segment 1D algorithm for discretization with python function. More...
    class  Mesh_Triangle
     Class to define a triangle 2D algorithm. More...
    class  Mesh_Quadrangle
     Class to define a quadrangle 2D algorithm. More...
    class  Mesh_Tetrahedron
     Class to define a tetrahedron 3D algorithm. More...
    class  Mesh_Hexahedron
     Class to define a hexahedron 3D algorithm. More...
    class  Mesh_Netgen
     Class to define a NETGEN-based 2D or 3D algorithm that need no discrete boundary (i.e. More...
    class  Mesh_Projection1D
     Class to define a projection 1D algorithm. More...
    class  Mesh_Projection2D
     Class to define a projection 2D algorithm. More...
    class  Mesh_Projection3D
     Class to define a projection 3D algorithm. More...
    class  Mesh_Prism3D
     Class to define a 3D extrusion algorithm. More...
    class  Mesh_RadialPrism3D
     Class to define a Radial Prism 3D algorithm. More...
    class  Mesh
     Class to define a mesh. More...

    Functions

    def GetName
     Gets object name.
    def SetName
    def TreatHypoStatus

    Variables

    int noNETGENPlugin = 0
    int noNETGENPlugin = 1
    int REGULAR = 1
    int PYTHON = 2
    int COMPOSITE = 3
    int MEFISTO = 3
    int NETGEN = 4
    int GHS3D = 5
    int FULL_NETGEN = 6
     POINT = SMESH_MeshEditor.POINT
     AXIS = SMESH_MeshEditor.AXIS
     PLANE = SMESH_MeshEditor.PLANE
     LAPLACIAN_SMOOTH = SMESH_MeshEditor.LAPLACIAN_SMOOTH
     CENTROIDAL_SMOOTH = SMESH_MeshEditor.CENTROIDAL_SMOOTH
    int VeryCoarse = 0
    int Coarse = 1
    int Moderate = 2
    int Fine = 3
    int VeryFine = 4
    int Custom = 5
    string NO_NAME = "NoName"
    +


    Function Documentation

    + +
    +
    + + + + + + + + + +
    def smeshDC.GetName (  obj  ) 
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + +
    def smeshDC.SetName (  obj,
      name 
    )
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    def smeshDC.TreatHypoStatus (  status,
      hypName,
      geomName,
      isAlgo 
    )
    +
    +
    + +

    + +

    +

    +


    Variable Documentation

    + +
    +
    + + + + +
    int smeshDC.noNETGENPlugin = 0 [static]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    int smeshDC.noNETGENPlugin = 1 [static]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    int smeshDC.REGULAR = 1 [static]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    int smeshDC.PYTHON = 2 [static]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    int smeshDC.COMPOSITE = 3 [static]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    int smeshDC.MEFISTO = 3 [static]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    int smeshDC.NETGEN = 4 [static]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    int smeshDC.GHS3D = 5 [static]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    int smeshDC.FULL_NETGEN = 6 [static]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.POINT = SMESH_MeshEditor.POINT [static]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.AXIS = SMESH_MeshEditor.AXIS [static]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    smeshDC.PLANE = SMESH_MeshEditor.PLANE [static]
    +
    +
    + +

    + +

    +

    + +

    + +
    + +

    + +

    +

    + +

    + +

    +
    + + + + +
    int smeshDC.VeryCoarse = 0 [static]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    int smeshDC.Coarse = 1 [static]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    int smeshDC.Moderate = 2 [static]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    int smeshDC.Fine = 3 [static]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    int smeshDC.VeryFine = 4 [static]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    int smeshDC.Custom = 5 [static]
    +
    +
    + +

    + +

    +

    + +

    +
    + + + + +
    string smeshDC.NO_NAME = "NoName" [static]
    +
    +
    + +

    + +

    +

    + +

    + + diff --git a/doc/salome/gui/SMESH/static/doxygen.css b/doc/salome/gui/SMESH/static/doxygen.css new file mode 100755 index 000000000..88e613d23 --- /dev/null +++ b/doc/salome/gui/SMESH/static/doxygen.css @@ -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 index 000000000..56d52a61a --- /dev/null +++ b/doc/salome/gui/SMESH/static/footer.html @@ -0,0 +1,10 @@ + + + + + +
    +
    Copyright © 2003-2007 CEA, EDF
    +
    + + diff --git a/doc/salome/gui/SMESH/static/header.html b/doc/salome/gui/SMESH/static/header.html new file mode 100755 index 000000000..a70a95e30 --- /dev/null +++ b/doc/salome/gui/SMESH/static/header.html @@ -0,0 +1,12 @@ + + + + + $title + + +
    +
    +SALOME documentation central +
    +
    diff --git a/doc/salome/gui/SMESH/texture_horiz_ltbluebubbles.jpg b/doc/salome/gui/SMESH/texture_horiz_ltbluebubbles.jpg deleted file mode 100755 index a10d494a5b6870a17ca18b9fd45de5bf80da5de5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1255 zcmex=ya2{16Qf}9NEK>#CAgCLWTp^|W*2%Dl~ zVxh8FW0I(mOTZe+z3%SITx@es=eY*dKh}7j>hSbyiD?Es_?i&|lN>$?=%Q zm7`bYRd2`%DJ;F6l^AT~w69{5**nFPdPhS{A8($MCFT^JtbBdTi~Xto`VT7iNxuBc zSAJr-rHGCD@{okjIk&WqJ~|z}r8O$HDMR?FOmx|+2`>{D^gNMC?)4E@J36~CyJq8; zpNc0!Z^p6NuA27F=z@E0!m=g(HchhotTU{1-cImJmOi%dk#_h)&BlFq{e0>)_*_3} z{4$^DbV74Kb3o|FA7ww@Etq;UwxHTp?y7a!%na+$l(#E|q;K8VskP&XoILNq8RL?> zxf)`tPL!=N>@YtkcuRewqATl^8BuQ+x+uoZ>@V1Q?WyBbMW5>x+lzbo7W}EwUu?uD zw(ZUekrUCT;s#rHyWLTAZJJZ_Fn7Ug4|AsvZ|+(|dv)cmVGlZOWv}w)C%;#}-R7&i zCDo1Je6(>+NoRVuyDs^(<7zv$u8sCjKfJsCtJ8kXri%^npR4~f6z+L&&PXi!&pz2* z{}~dyUu)bxsJTA>OvDSV&o3n=iLMsgp<9KM=gg>hdFa-aDpNmx zz3bBq*^VB%-SW*uW5T8hucLQpY|(Bue0y!%oh+jjno@7By(?OIMSef)r!>c1*Q0x# zW^ubMdU$Pj!R;*?4Z%Gz$~$Cp*`CD7K3?`Z+tGLPgjW@bb7Jo6?6va|(R#CdX6 zxnPF!wxZx*_j!&6_hq-p3Y48zHJtP$;G^h@FH>&ZFIcV?FUrpJOQcry*uoT%;|o`7 z{rGdZraZvw!MfeH^Co01-R-eOc2z;ywNBo5`P1U&v+0~XpC;$NWdRu zC0TxM`zrqal1!h@>yJ~f{IYJ8S6ui^&(*IXB;`h~n0-R - - - - -Transforming Meshes - - - - - - - - - - - -

    Transforming Meshes

    - -

    Transforming Meshes

    - -

     

    - -

    Translation

    - -

     

    - -

    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)  

    - -

     

    - -

    Rotation

    - -

     

    - -

    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)  

    - -

     

    - -

    Symmetry

    - -

     

    - -

    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) -

    - -

     

    - -

    Merging - Nodes

    - -

     

    - -

    import SMESH_mechanic

    - -

    mesh = SMESH_mechanic.mesh

    - -

     

    - -

    # merge nodes

    - -

    Tolerance = 25.0

    - -

     

    - -

    GroupsOfNodes = -  mesh.FindCoincidentNodes(Tolerance)

    - -

    mesh.MergeNodes(GroupsOfNodes) -  

    - -

     

    - -

    Merging Elements

    - -

    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) -

    - -

     

    - -

    Sewing Meshes

    - -

    Sew Meshes Border to Border

    - -

    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)

    - -

    Sew Conform Free Borders

    - -

    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)  

    - -

    Sew Free Borders

    - -

    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)

    - -

    Sew Side Elements

    - -

    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)

    - - - - diff --git a/doc/salome/gui/SMESH/transparency.htm b/doc/salome/gui/SMESH/transparency.htm deleted file mode 100755 index ab7df8c56..000000000 --- a/doc/salome/gui/SMESH/transparency.htm +++ /dev/null @@ -1,98 +0,0 @@ - - - - - -Transparency - - - - - - - - - - - - -

    Transparency

    - -

    - -

     

    - -

    Using this slider you can set the transparency of shading. Absolutely - transparent shading will be invisible. By default it is absolutely opaque. -  

    - -

     

    - - - - diff --git a/doc/salome/gui/SMESH/viewing_meshes.htm b/doc/salome/gui/SMESH/viewing_meshes.htm deleted file mode 100755 index f2eca5e99..000000000 --- a/doc/salome/gui/SMESH/viewing_meshes.htm +++ /dev/null @@ -1,187 +0,0 @@ - - - - - -Viewing Meshes - - - - - - - - - - - -

    Viewing Meshes

    - -

    Viewing Mesh Infos

    - -

    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()  

    - - - - diff --git a/doc/salome/gui/SMESH/volume.htm b/doc/salome/gui/SMESH/volume.htm deleted file mode 100755 index bb675f1e0..000000000 --- a/doc/salome/gui/SMESH/volume.htm +++ /dev/null @@ -1,123 +0,0 @@ - - - - - -Volume - - - - - - - - - - - -

    Volume

    - -

    Volume mesh quality - criterion reflects the volume of meshes of a 3D object.

    - -

    - -

    To - apply the Volume quality criterion to your mesh:

    - -

    1. Display your mesh in the viewer.

    - -

    2. Choose Controls - > Volume or click button in the toolbar. Your - mesh will be displayed in the viewer with its elements colored according - to the applied mesh quality control criterion:

    - -

    See Also - a sample TUI Script of a Volume quality control operation. -  

    - -

     

    - -

     

    - -

     

    - - - - diff --git a/doc/salome/gui/SMESH/webhelp.cab b/doc/salome/gui/SMESH/webhelp.cab deleted file mode 100755 index b942f642f9b003eeb7959f3378d4681fd302ed68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89619 zcmaf)Wmp_o(zbDT5AN<3+}+)SySrO(cbDJ}!QEW~1lQp1u7U9N>}KYjoiEwt2iJ(hGtg^5e5a0_{7x<3{AliR@2Lb{G1_sjk`5YYy2nY%Y7)TrB=L>b$YNUbw5Iu=_KT1Xv&-Yt`T43I>i&f7Kof8VKlz{%=_oJ1Y}g3(vpsIRJ@a z`TygRKg;)LVSZ*w1`x>cf5HDOija$iweeq0=mA!U*1vc1rPPoKaSeZBO+*Q zVDJ1_G)91Ewgdi)m6D0Eg`r^%ms0yxmf{%^E`f$e`fV1ok!^2zz1CO;kA0QRe{;y1L4iMz9)qlv*!mJJY0 zQQfat7iVWXTLl*JtRb#xT9b$0al$x#5h+U3J9I57h&6G>+i zn|}%UCrtJZ(5GI01v@+a!~YM!zVo01bo{f4|8+3LoSps_<}qMDxX6ExDO>&3f3?7Y zfJo_nfr?w({lj@UVCQ_9e~mgh88~|U5dkUF&#ZO_6t-}(CCk5u54jz^>fu70O}(CD^%Fr#n#HiSj52jPgTwXSPhB)!Tv*I3;>)? z^1s+f+M51(U@2jMfOMpO#r|==g$<0%O@2l_47gf?RDMO;8k@NPV@omsMV9{8Jn`>K z{VzR8{sI3@5lR3-?%Dos)qm9ZkN*DN=~u9vi_QOEyLAL0AU2m@;4%ibW-fsAer5&< z&<|?RuehIw?C%|Jf(Qr*JLJE>KNr0LAO|JC;QnZ7$|lav7Pe+T(KkS6UMc$p3b?4O z|9L3Q0hL{@{Uz*V=i+E&B4c6rb6pP%>SDISI7Pt04zG7*{%MHvord8qfw*+%vzVf=Kdip9zgoU*nkcDXQNTE zGy0pX=m0a5F7@xRza891fUYC|X#W3PQB_Gs%);740x;iN|CM?m01V{+742kV{KsDX zxu<}M6GG^}aDR@!RsfNLi~R!phxWq({m@?Jmz<-si-GmuySy3TP(5k>AM5OBV&V#D zS33W?v;pG#8RQTkX?@-Q!YThtQ9tQ^fK18tenBf+7+M3=ENl*#`cwd}e)0}RKtM;P zzu^C1{>bhh(dYnBt+9Xee~j{gG5*i_Q|HeoKbIy4>{-+JuTj8_^OJ%{1_Jsv|6A(s z6$=4SNBh4;rA<5}{~Fhf0d=rD`Yo&Sx9)8V=&rMuzeUymhWY|h68!#a6maGJ>mK`= z*E|621_KBTpxA#F>QD4ih*FDzZj3#~sp|Fq#H zo5}i$E+w5u5!5cLMGu|_B7~Tm(X@nNc|~b)T@YO;DXWCwGRYaj?Ht-3B-?v*im)$Y zp>GjNmn6(j}@3!2LltuTa;uvtvahKcGV^@e$ z1*a#vUc1nV^xXAD#os2{_-!G%1G6$#KEPeGgZ1}5lEY`kU4TKNVQrFJ>6;JIgT)Xg z2vLmZRvOxQt|x1}Ds1?wmO<3#QW9L}rU_a^zwcb9DHAJUKr)9u687ZyEJ!s@KIbIj zq*dEqyIIu+v8Nz5iXK$d=t_+b@zf?#3m&f`j4t@Kf9{juJPLOU5)Q@?wwc&n-iU7} znWiB!Z6QkJJ9A#oH&dPGB5bx$v%ONvk6%C zRtcog#07&T_>V#6WeIUYr}<%ExU0H{A2{5%P<{bp4J{(KuYs&w>%vY@y)XK~ zWMJ(e4I5>M=97LX3IrLO8a1-4hydgSW-wbCXi<;_ec&?6)O#M>nH`#@FvPxnxVtCT zQh&!jjnU2P3>o{z^&0%xC!hXjn6c<^`l^;T8p%`*6M075Fx)A9d=-|`HVxoHB?`Gy zZwPQf?A0?*dws@pe^Iy;t>qFLeE1N^&*LM|>^|KLg}q7|LZvANkjg_s=!3ms;>H@n z%;iPBmpW}J`yȲ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

    oXOQ}Ge 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

    3mV47(J-nnng03vOv>=_>hgK# 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 - - - - - diff --git a/doc/salome/gui/SMESH/whcshdata.htm b/doc/salome/gui/SMESH/whcshdata.htm deleted file mode 100755 index a21983910..000000000 --- a/doc/salome/gui/SMESH/whcshdata.htm +++ /dev/null @@ -1,87 +0,0 @@ - - -Mesh Module Reference Manual - - - - - - - - - - diff --git a/doc/salome/gui/SMESH/whd_dpns.htm b/doc/salome/gui/SMESH/whd_dpns.htm deleted file mode 100755 index 3983ccbdd..000000000 --- a/doc/salome/gui/SMESH/whd_dpns.htm +++ /dev/null @@ -1,43 +0,0 @@ - - -Navigator Pane - - - - - - - - - - - - - - \ 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 index 97ea0bb6d7aae6a5c303f7288804f3ea9f0e2adc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmZ?wbhEHbRAmrm*vtR|4Pe{=rW$~}1`s%K;J|;N_#fBm(s{K5IA+wS(XUH&97X-)sr-!@Y0 U%`L5M?HwJV-95d1eS!?u0EaP9SpWb4 diff --git a/doc/salome/gui/SMESH/whd_hide1.gif b/doc/salome/gui/SMESH/whd_hide1.gif deleted file mode 100755 index 97ea0bb6d7aae6a5c303f7288804f3ea9f0e2adc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmZ?wbhEHbRAmrm*vtR|4Pe{=rW$~}1`s%K;J|;N_#fBm(s{K5IA+wS(XUH&97X-)sr-!@Y0 U%`L5M?HwJV-95d1eS!?u0EaP9SpWb4 diff --git a/doc/salome/gui/SMESH/whd_hide2.gif b/doc/salome/gui/SMESH/whd_hide2.gif deleted file mode 100755 index 97ea0bb6d7aae6a5c303f7288804f3ea9f0e2adc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmZ?wbhEHbRAmrm*vtR|4Pe{=rW$~}1`s%K;J|;N_#fBm(s{K5IA+wS(XUH&97X-)sr-!@Y0 U%`L5M?HwJV-95d1eS!?u0EaP9SpWb4 diff --git a/doc/salome/gui/SMESH/whd_next0.gif b/doc/salome/gui/SMESH/whd_next0.gif deleted file mode 100755 index d92dda5223599ae2e8764bd25d24f93b5b35d887..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmZ?wbhEHblx7fS*vtR|4Pe{=rW$~}1`s%K;J|;N_GOF0KgAF3IG5A diff --git a/doc/salome/gui/SMESH/whd_next1.gif b/doc/salome/gui/SMESH/whd_next1.gif deleted file mode 100755 index d92dda5223599ae2e8764bd25d24f93b5b35d887..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmZ?wbhEHblx7fS*vtR|4Pe{=rW$~}1`s%K;J|;N_GOF0KgAF3IG5A diff --git a/doc/salome/gui/SMESH/whd_next2.gif b/doc/salome/gui/SMESH/whd_next2.gif deleted file mode 100755 index d92dda5223599ae2e8764bd25d24f93b5b35d887..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmZ?wbhEHblx7fS*vtR|4Pe{=rW$~}1`s%K;J|;N_GOF0KgAF3IG5A diff --git a/doc/salome/gui/SMESH/whd_nvp10.htm b/doc/salome/gui/SMESH/whd_nvp10.htm deleted file mode 100755 index 05b5f908c..000000000 --- a/doc/salome/gui/SMESH/whd_nvp10.htm +++ /dev/null @@ -1,15 +0,0 @@ - - -Navigation Pane - - - - - - - - - - - - diff --git a/doc/salome/gui/SMESH/whd_nvp20.htm b/doc/salome/gui/SMESH/whd_nvp20.htm deleted file mode 100755 index 23c23dc4f..000000000 --- a/doc/salome/gui/SMESH/whd_nvp20.htm +++ /dev/null @@ -1,334 +0,0 @@ - - -navigation pane - - - - - - - - - - - - - - - - - diff --git a/doc/salome/gui/SMESH/whd_prev0.gif b/doc/salome/gui/SMESH/whd_prev0.gif deleted file mode 100755 index 518561a0d284eea6b136e0f65591bbe3f00173ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmZ?wbhEHblx7fS*vtR|4Pe{=rW$~}1`s%K;J|;N_ oU;NgcIXC46r>s_>iMrWq#-jL{%@sa+vrjf`sXCjtTbaQc0N6r5jsO4v diff --git a/doc/salome/gui/SMESH/whd_prev1.gif b/doc/salome/gui/SMESH/whd_prev1.gif deleted file mode 100755 index 518561a0d284eea6b136e0f65591bbe3f00173ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmZ?wbhEHblx7fS*vtR|4Pe{=rW$~}1`s%K;J|;N_ oU;NgcIXC46r>s_>iMrWq#-jL{%@sa+vrjf`sXCjtTbaQc0N6r5jsO4v diff --git a/doc/salome/gui/SMESH/whd_prev2.gif b/doc/salome/gui/SMESH/whd_prev2.gif deleted file mode 100755 index 518561a0d284eea6b136e0f65591bbe3f00173ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmZ?wbhEHblx7fS*vtR|4Pe{=rW$~}1`s%K;J|;N_ oU;NgcIXC46r>s_>iMrWq#-jL{%@sa+vrjf`sXCjtTbaQc0N6r5jsO4v diff --git a/doc/salome/gui/SMESH/whd_show0.gif b/doc/salome/gui/SMESH/whd_show0.gif deleted file mode 100755 index 60e8e689798894e49320835bacdce74069bc2755..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199 zcmZ?wbhEHb)M5~3*vtR|4Pe{=rW$~}1`s%K;J|;N_E$rasmle_fbS~emu&&XWTYKFwOuzj8WaIn> egZkzce)i6;?w;Ph{%-S0lc!9bHhsDvgEasywN*#} diff --git a/doc/salome/gui/SMESH/whd_show1.gif b/doc/salome/gui/SMESH/whd_show1.gif deleted file mode 100755 index 60e8e689798894e49320835bacdce74069bc2755..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199 zcmZ?wbhEHb)M5~3*vtR|4Pe{=rW$~}1`s%K;J|;N_E$rasmle_fbS~emu&&XWTYKFwOuzj8WaIn> egZkzce)i6;?w;Ph{%-S0lc!9bHhsDvgEasywN*#} diff --git a/doc/salome/gui/SMESH/whd_show2.gif b/doc/salome/gui/SMESH/whd_show2.gif deleted file mode 100755 index 60e8e689798894e49320835bacdce74069bc2755..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199 zcmZ?wbhEHb)M5~3*vtR|4Pe{=rW$~}1`s%K;J|;N_E$rasmle_fbS~emu&&XWTYKFwOuzj8WaIn> egZkzce)i6;?w;Ph{%-S0lc!9bHhsDvgEasywN*#} diff --git a/doc/salome/gui/SMESH/whd_sync0.gif b/doc/salome/gui/SMESH/whd_sync0.gif deleted file mode 100755 index 1a9785ce625d4b5226515db4d6e0c7af3e416fba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 231 zcmZ?wbhEHbv|vM`9&x+nI$ zNd8r_c*)1$HEPY51-@OEc3gZ{eya7pwBt{WU+i`cUmmp8QZH$8UqzwSs@BDAwHYZ@ zNoh?j`R(#$ZiyX{(Jdi~6SEt%OMG>D%4g2fo-=KIR Lx^4SrK?Z98%;sR# diff --git a/doc/salome/gui/SMESH/whd_sync1.gif b/doc/salome/gui/SMESH/whd_sync1.gif deleted file mode 100755 index 1a9785ce625d4b5226515db4d6e0c7af3e416fba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 231 zcmZ?wbhEHbv|vM`9&x+nI$ zNd8r_c*)1$HEPY51-@OEc3gZ{eya7pwBt{WU+i`cUmmp8QZH$8UqzwSs@BDAwHYZ@ zNoh?j`R(#$ZiyX{(Jdi~6SEt%OMG>D%4g2fo-=KIR Lx^4SrK?Z98%;sR# diff --git a/doc/salome/gui/SMESH/whd_sync2.gif b/doc/salome/gui/SMESH/whd_sync2.gif deleted file mode 100755 index 1a9785ce625d4b5226515db4d6e0c7af3e416fba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 231 zcmZ?wbhEHbv|vM`9&x+nI$ zNd8r_c*)1$HEPY51-@OEc3gZ{eya7pwBt{WU+i`cUmmp8QZH$8UqzwSs@BDAwHYZ@ zNoh?j`R(#$ZiyX{(Jdi~6SEt%OMG>D%4g2fo-=KIR Lx^4SrK?Z98%;sR# diff --git a/doc/salome/gui/SMESH/whd_tab0.gif b/doc/salome/gui/SMESH/whd_tab0.gif deleted file mode 100755 index 955c42f47a076d635e5f28250996e98e7cd7c076..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 285 zcmV+&0pk8gNk%w1VeSDK0HXf@|NsBx<>kP@z`wu00002Mz`y_i00000A^8LW000F5 zEC2ui0PX=806+ucIJ(^aFv>}*y*TU5yZ>M)j$~<`XsWJk>%MR-&vb3yc&_h!@BhG{ za7Zi~kI1BQ$!z`v(5Q4uty-_xtai)odcWYXcuX#v&*-#z&0ag-@VIs;jK6uCK7M zvayD>wzs&sy1Tr+zQ4f1!o$SH#>dFX%FE2n&d<=%($mz{*4NnC+S}aS*#O|-;^XAy j=I7|?>g(+7?(gvN^7Hid_V@Vt`uqI*-v0piBme+AZ&j?@ diff --git a/doc/salome/gui/SMESH/whd_tab1.gif b/doc/salome/gui/SMESH/whd_tab1.gif deleted file mode 100755 index b3ec41d6d8a6a3f2d06b41f8ea70572610acbfdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 237 zcmZ?wbhEHbbYl=@*vtR|4Pe{=rW$~}1`s%K;J|;N_$ATn&sXV7$()z5O37izzJfJ!?b`Q$c;Bvk-@SYO2XPn1zT*pp zB8-__JR?GW^@#djjxO6e*VI2&EU2lc@8~ll%UIi3@4F^ZKI_$wf6tQps&@3Ne^E|F zLup%Hd_-awznW-Ok)e6q?^?=|z+uGd_>VZ)}) RYqxIm-m%k}fnAWn8USudW4QnT diff --git a/doc/salome/gui/SMESH/whd_tab2.gif b/doc/salome/gui/SMESH/whd_tab2.gif deleted file mode 100755 index 08fb0ce4fe630b4dd33f1f8d099945ff48531b0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226 zcmZ?wbhEHbv||uu*vtR|4Pe{=rW$~}1`s%K;J|;N_amdW@3l){E)f@i$$g^S+H!mvz_+Zb?dcPZQ>AQ Gum%87{9UmC diff --git a/doc/salome/gui/SMESH/whd_tab3.gif b/doc/salome/gui/SMESH/whd_tab3.gif deleted file mode 100755 index 1819c8e8f786ed0b62007b198cb69dca982c49f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmZ?wbhEHbG-eQG*vtR|4Pe{=rW$~}1`s%K;J|;N_tQPIo@N&L#vFwFx*~w?0Zi@IVyZ?G?SxwgB2Sq=oM{i31m{lp1 o6|Yd&+>jp=)lsO@?iOr5ams`##?z)-O`hdDXRZYUyC8!#0CKBV4FCWD diff --git a/doc/salome/gui/SMESH/whd_tab4.gif b/doc/salome/gui/SMESH/whd_tab4.gif deleted file mode 100755 index 1a6fc4f4aa68d1b8fdd35c21c002f4a117133639..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198 zcmZ?wbhEHb)MF53*vtR|4Pe{=rW$~}1`s%K;J|;N_j1LiMqShUz?=`!;bD@_^L1sSXX;;C5C diff --git a/doc/salome/gui/SMESH/whd_tab6.gif b/doc/salome/gui/SMESH/whd_tab6.gif deleted file mode 100755 index fe312d238ad98026d9171f20077f95e372a82752..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212 zcmZ?wbhEHbG-D8D*vtR|4Pe{=rW$~}1`s%K;J|;N_*vtR|4Pe{=rW$~}1`s%K;J|;N_$5v+f;9S4GUsJ*HDtct_r7pLLGEFr+V_8Ee0O;8o<&2<`FKKp zgqPAJzo)&PT}q5Wa-}I#9eTspT+b9~?!S8>tcA^f&bH2eyZmdZ{r>)&Ny+JT znL<_d9VJB_oh^Np#xCXkwNtyg@*7p#oATmQ7Br?-^r+2=G;7V8xWXY%WBJ+@8#e`Q P+3L7`hb;rUAcHjkosMI* diff --git a/doc/salome/gui/SMESH/whd_tab8.gif b/doc/salome/gui/SMESH/whd_tab8.gif deleted file mode 100755 index c80acc8d57852a246362d981ae89d4148f157987..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225 zcmZ?wbhEHbv|$is*vtR|4Pe{=rW$~}1`s%K;J|;N_WX{W2)us4ipV)^3U#ew_*Or&hV{|y+vg7j?6Bkay z$U8Fi;%Ua8k9bV=dSI~ftX`|PkLjzUMS>3vSbJQ%3r}pVys>U^^SeKxMtvvmrk72WmQa=UOuH{qFu0FTg{|-^09LkFYj1xWvjh*-FnScs{|RW E0hmEvxBvhE diff --git a/doc/salome/gui/SMESH/whd_tabs.htm b/doc/salome/gui/SMESH/whd_tabs.htm deleted file mode 100755 index e8c498c88..000000000 --- a/doc/salome/gui/SMESH/whd_tabs.htm +++ /dev/null @@ -1,533 +0,0 @@ - - -WebHelp Tabs Frame in Navigation Pane - - - - - - - - - - - \ 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 index 11017258c92970b19454ead146fd5b379bec281f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153 zcmZ?wbhEHb6krfw*v!E29|#!!A2@KJ0SFix6c`j3@B+o3EQ|~cj0`#;RUk8*S=?{xVR_$zZm5-g_Pmk7#Uti(DzxdWm!V8gx$+Ye-*fKA Z&qxFbzbZW-RFiQ{v>{?oou(jzH2|ujEKL9a diff --git a/doc/salome/gui/SMESH/whd_toc2.gif b/doc/salome/gui/SMESH/whd_toc2.gif deleted file mode 100755 index 975e5f6f4dde718d6af7eb7aaca2301a398d0985..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmZ?wbhEHb6krfw*v!E29|RbH@W6os4M4!qpunKOfEy_OWMO1rU}De#DFK<`%n}vg zp|pDIvWD7YY>bQ|?GtjD74se@CfrgKZZ@Bmp0zThw8(5iM~YSk!(9It&y2-*E@YG} v+8t4Edv%%mPet2C-OICinA>(d7FSUdOO|VTbKuP+zH@t`jkbp=F<1itbz3&o diff --git a/doc/salome/gui/SMESH/whd_toc3.gif b/doc/salome/gui/SMESH/whd_toc3.gif deleted file mode 100755 index 4b8122f0f430c4baa062d3681f98f0e41e749017..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158 zcmZ?wbhEHb6krfw*v!E29|RbH@W6os4Gj$n3<^Lo2HZgLCkrD30~3P|ND0UcXBO{( z37)HW%xGY+`tCe2SC&&|MMdWPovo4CLd=bx@xKpd$4#<1nc$(rX1ea|6E)438OQq) gtyoviVpt_6a5ii8UHu;M1& diff --git a/doc/salome/gui/SMESH/whd_topic.xml b/doc/salome/gui/SMESH/whd_topic.xml deleted file mode 100755 index b1946d757..000000000 --- a/doc/salome/gui/SMESH/whd_topic.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - -"]]> - - - - -"]]> - - - - -"; -OutputInTopicNavBarDataWebSearch.form();]]> - - - - - - - - - - -"]]> - - - diff --git a/doc/salome/gui/SMESH/whd_wbsh0.gif b/doc/salome/gui/SMESH/whd_wbsh0.gif deleted file mode 100755 index 383688e7cdf6fc64d789bef55fb569d00563682b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 260 zcmZ?wbhEHb^k5KX*vtR|4Pe{=rW$~}1`s%K;J|;N_pi3um7TZ!{OM~2XVw-kO|^-f^X$8OVoiBY zc2#mlo_l>saATyygp%rj?#ZQ7CMony>nWRpi3um7TZ!{OM~2XVw-kO|^-f^X$8OVoiBY zc2#mlo_l>saATyygp%rj?#ZQ7CMony>nWRpi3um7TZ!{OM~2XVw-kO|^-f^X$8OVoiBY zc2#mlo_l>saATyygp%rj?#ZQ7CMony>nWR - -Search Result - - - - - - - - - - - - - - - - - diff --git a/doc/salome/gui/SMESH/whfdhtml.htm b/doc/salome/gui/SMESH/whfdhtml.htm deleted file mode 100755 index c2e65bea1..000000000 --- a/doc/salome/gui/SMESH/whfdhtml.htm +++ /dev/null @@ -1,30 +0,0 @@ - - -Search Frame - - - - - - - - - diff --git a/doc/salome/gui/SMESH/whfform.htm b/doc/salome/gui/SMESH/whfform.htm deleted file mode 100755 index 0f8f90ab6..000000000 --- a/doc/salome/gui/SMESH/whfform.htm +++ /dev/null @@ -1,136 +0,0 @@ - - -Search Form - - - - - - - - - - - - - - diff --git a/doc/salome/gui/SMESH/whfhost.js b/doc/salome/gui/SMESH/whfhost.js deleted file mode 100755 index c3c7144fa..000000000 --- a/doc/salome/gui/SMESH/whfhost.js +++ /dev/null @@ -1,945 +0,0 @@ -// WebHelp 5.10.003 -var gsSK2=null; -var gsSK=null; -var gsFtsBreakChars="\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=\x85\x92\x93\x94\x95\x96\x97\x99\xA9\xAE\xB7"; -var gnCLF=0; -var gsHelpCannotSearch="Cannot search for that phrase."; -var gsNoTopics="No Topics Found."; -var gsLoadingDivID="LoadingDiv"; -var gsLoadingMsg="Loading data, please wait..."; -var gsSearchMsg="Searching..."; -var gsResultDivID="ResultDiv"; -var gaaFCD=new Array(); -var gaaFTCD=new Array(); -var goCF=null; -var goCTF=null; -var gaTI=null; -var gnCurrentOp=0; -var gbNot=false; -var gbReady=false; -var gnLoadFts=1; -var gnCacheLimits=5; -var gaCCD=new Array(); -var gbXML=false; -var gaData=new Array(); -var gsBgColor="#ffffff"; -var gsBgImage=""; -var gsMargin="0pt"; -var gsIndent="0pt"; -var gsCheckKey=null; -var gnIndexNum=0; -var gaFtsContentsCon=null; -var gaTopicCheckInfo=null; -var gnTopicCheck=0; -var goFont=null; -var goErrFont=null; -var goHoverFont=null; -var gsABgColor="#cccccc"; -var gbWhFHost=false; -var gbFirst=false; - -function setBackground(sBgImage) -{ - gsBgImage=sBgImage; -} - -function setBackgroundcolor(sBgColor) -{ - gsBgColor=sBgColor; -} - -function setFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration) -{ - var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration); - if(sType=="Normal") - goFont=vFont; - else if(sType=="Error") - goErrFont=vFont; - else if(sType=="Hover") - goHoverFont=vFont; -} - -function setActiveBgColor(sBgColor) -{ - gsABgColor=sBgColor; -} - -function setMargin(sMargin) -{ - gsMargin=sMargin; -} - -function setIndent(sIndent) -{ - gsIndent=sIndent; -} - -function updateCache(oCF) -{ - var len=gaCCD.length; - if(len0&&sURL) - { - var topic=new Object(); - topic.sTopicTitle=name; - topic.sTopicURL=sURL; - aTopics[aTopics.length]=topic; - } - } - oChild=oChild.nextSibling; - } - putFtsTData(aTopics); - } - } - else if(gnLoadFts==2) - { - var node=xmlDoc.lastChild; - if(node) - { - var oChild=node.firstChild; - var aFtsContents=new Array(); - while(oChild) - { - if(oChild.nodeName=="key") - { - var name=oChild.getAttribute("name"); - if(name&&name.length>0) - { - var item=new Object(); - item.sItemName=name; - aFtsContents[aFtsContents.length]=item; - var oChildChild=oChild.firstChild; - while(oChildChild) - { - if(oChildChild.nodeName=="#text") - { - var sIDs=oChildChild.nodeValue; - if(sIDs) - { - var nBPos=0; - do - { - var nPos=sIDs.indexOf(",",nBPos); - var sID=null; - if(nPos!=-1) - sID=sIDs.substring(nBPos,nPos); - else - sID=sIDs.substring(nBPos); - - if(sID) - { - var id=parseInt(sID); - if(!isNaN(id)) - { - if(!item.aTopics) - item.aTopics=new Array(); - item.aTopics[item.aTopics.length]=id; - } - } - nBPos=nPos+1; - }while(nBPos!=0&&nBPos0) - { - document.body.background=gsBgImage; - } - if(gsBgColor&&gsBgColor.length>0) - { - document.body.bgColor=gsBgColor; - } - writeResultDiv(); - loadFts(); - var oMsg=new whMessage(WH_MSG_SHOWFTS,this,1,null) - SendMessage(oMsg); -} - -function writeResultDiv() -{ - var sHTML="

    "; - document.body.insertAdjacentHTML("beforeEnd",sHTML); -} - -function loadFts() -{ - if(!gbReady) - { - var oResMsg=new whMessage(WH_MSG_GETPROJINFO,this,1,null); - if(SendMessage(oResMsg)&&oResMsg.oParam) - { - gbReady=true; - var oProj=oResMsg.oParam; - var aProj=oProj.aProj; - gbXML=oProj.bXML; - if(aProj.length>0) - { - var sLangId=aProj[0].sLangId; - for(var i=0;i=0)&&(gsFtsBreakChars.charAt(nSep)=="|"))){ - gnCurrentOp=0; - gbNot=false; - }else if((sCW=="and")||((nSep>=0)&&(gsFtsBreakChars.charAt(nSep)=="&"))){ - gnCurrentOp=1; - gbNot=false; - }else if((sCW=="not")|| - ((nSep>=0)&&(gsFtsBreakChars.charAt(nSep)=="~"))){ - gbNot=!gbNot; - }else if(sCW!=""&&!IsStopWord(sCW,gaFtsStop)){ - var sCurrentStem=GetStem(sCW); - gsCW=sCurrentStem; - ftsFindKeyword(); - return; - } - findOneKey(); - } - else{ - displayTopics(); - checkAgain(); - } -} - -function checkAgain() -{ - gsCheckKey = ""; - gnIndexNum = 0; - gsSK=gsSK2; - gsSK2=null; - if(gsSK!=null) - setTimeout("findFTSKey();",1); -} - -function displayTopics() -{ - var sHTML=""; - var sLine=""; - for(var i=0;i"+_textToHtml(gaTI[i].sTopicTitle)+""; - if(i>>4<<4==i) - { - sHTML+=sLine; - sLine=""; - } - } - if(sLine.length>0) - sHTML+=sLine; - - if(sHTML.length==0) - sHTML="

    "+gsNoTopics+"

    " - else - sHTML="
    "+sHTML+"
    "; - - var resultDiv=getElement(gsResultDivID); - if(resultDiv) - resultDiv.innerHTML=sHTML; -} - -function displayMsg(sErrorMsg) -{ - var sHTML="

    "+sErrorMsg+"

    "; - - var resultDiv=getElement(gsResultDivID); - if(resultDiv) - resultDiv.innerHTML=sHTML; -} - -function ftsFindKeyword() -{ - var sKey=gsCW; - var bNeedLoad=false; - var aFtsContentsCon=null; - var s=0; - if(sKey==null) return; - if(!gsCheckKey||sKey!=gsCheckKey||gnIndexNum==0) - { - aFtsContentsCon=new Array(); - gnCheck=0; - gsCheckKey=sKey; - gnTopicCheck=0; - gaTopicCheckInfo=null; - } - else{ - s=gnIndexNum; - aFtsContentsCon=gaFtsContentsCon; - } - for(var i=gnCheck;i=aTI.length) - { - aLS=gaTI; - aSS=aTI; - } - else - { - aLS=aTI; - aSS=gaTI; - } - var s=0; - for(var i=0;i=0) - { - var nM; - var bFound=false; - do{ - nM=(nB+nE)>>1; - if(compare(aTI[nM].sTopicTitle,oTI.sTopicTitle)>0) - nE=nM-1; - else if(compare(aTI[nM].sTopicTitle,oTI.sTopicTitle)<0) - nB=nM+1; - else - { - bFound=true; - break; - } - }while(nB<=nE); - if(bFound) - insertItemIntoArray(aTI,nM,oTI); - else - { - if(compare(aTI[nM].sTopicTitle,oTI.sTopicTitle)<0) - insertItemIntoArray(aTI,nM+1,oTI); - else - insertItemIntoArray(aTI,nM,oTI); - } - } - else - aTI[0]=oTI; -} - -function mergeTopics(aTI1,aTI2) -{ - var i1=0; - var i2=0; - var len1=aTI1.length; - var len2=aTI2.length; - var aTopicNew=new Array(); - var i=0; - while(i1>1; - if(compare(keys[nM].sItemName,sKey)>0) - nE=nM-1; - else if(compare(keys[nM].sItemName,sKey)<0) - nB=nM+1; - else{ - bFound=true; - break; - } - }while(nB<=nE); - if(bFound) - { - if(keys[nM].aTopics) - { - for(var i=0;i>1; - if(aFTCD[nM].nBegin>nTopicId) - nE=nM-1; - else if(aFTCD[nM].nEnd

    j~{Nec#Mquyiq~w?PvJkzJKpjPgmOD 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/symmetry3.png b/doc/salome/gui/SMESH/images/symmetry3.png new file mode 100755 index 0000000000000000000000000000000000000000..b573636bcd1ca053108d00914da2432ad1a7cd63 GIT binary patch literal 21797 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/translation2.png b/doc/salome/gui/SMESH/images/translation2.png new file mode 100755 index 0000000000000000000000000000000000000000..d1923e67fbea9ec743dbffacceeae6ebe7178322 GIT binary patch literal 19462 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

    "; -} - -function fakeItemsArea(nB,n,sKA,sKB,obj) -{ - this.nB=nB; - this.nNum=n; - this.sKA=sKA; - this.sKB=sKB; - this.obj=obj; - this.nMargin=(n-1)*gnUHeight; - - this.setNum=function(n) - { - var nLastobj=-1; - var nDelta=this.nMargin; - this.nMargin=(n-1)*gnUHeight; - nDelta=nDelta-this.nMargin; - if(n>0) - { - this.nNum=n; - var nMU=getMaxUnits(); - nLastobj=Math.floor((n-1)/nMU); - if(this.obj.length) - this.obj[nLastobj].style.marginTop=((n-1)%nMU)*gnUHeight; - else - this.obj.style.marginTop=((n-1)%nMU)*gnUHeight; - } - if(this.obj.length) - { - for(var i=this.obj.length-1;i>nLastobj;i--) - removeThis(this.obj[i]); - } - else - { - if(nLastobj==-1) - removeThis(this.obj); - } - return nDelta; - } - this.insertAdjacentHTML=function(sWhere,sHTML) - { - if(sWhere=="beforeBegin") - { - if(this.obj.length) - this.obj[0].insertAdjacentHTML(sWhere,sHTML); - else - this.obj.insertAdjacentHTML(sWhere,sHTML); - } - else if(sWhere=="afterEnd") - { - if(this.obj.length) - { - if(gbMac&&gbIE5&&this.obj[this.obj.length-1].nextSibling) - this.obj[this.obj.length-1].nextSibling.insertAdjacentHTML("beforeBegin",sHTML); - else - this.obj[this.obj.length-1].insertAdjacentHTML(sWhere,sHTML); - } - else - { - if(gbMac&&gbIE5&&this.obj.nextSibling) - this.obj.nextSibling.insertAdjacentHTML("beforeBegin",sHTML); - else - this.obj.insertAdjacentHTML(sWhere,sHTML); - } - } - } - this.getBtm=function() - { - if(this.obj.length) - return this.obj[this.obj.length-1].offsetTop; - else - return this.obj.offsetTop; - } - this.getTop=function() - { - return this.getBtm()-this.nMargin; - } -} - -function usedItems(nB,nE) -{ - this.nB=nB; - this.nE=nE; - this.oN=null; -} - -function checkReady() -{ - var len=gaChunks.length; - var bNeedLoad=false; - var aDataCon; - var s=0; - var bDown=(gsSKB==null); - var sK=bDown?gsSKA:gsSKB; - if(sK==null) - { - markEnd(); - setTimeout("checkAgain();",50); - return; - } - if(!gsChK||sK!=gsChK||gnNum==0) - { - gnCheck=0; - gsChK=sK; - aDataCon=new Array(); - } - else{ - s=gnNum; - aDataCon=gaDataCon; - } - for(var i=gnCheck;i0&&aPos[i]>=0&&aPos[i]0) - { - sCurrentK=aDataCon[i].aKs[aPos[i]].sName; - } - } - } - return sCurrentK; -} - -function checkAgain() -{ - if(!gbProcess) - { - if(gsBCK!=null) - { - gsCK=gsBCK; - gsBCK=null; - findCK(); - } - else - { - markBegin(); - getUnitIdx(document.body.scrollTop,document.body.clientHeight); - } - } - else - setTimeout("checkAgain()",50); -} - -function getLimit(aDataCon,aPos,aMaxPos,aMinPos,i) -{ - aMaxPos[i]=aDataCon[i].nNum; - aMinPos[i]=-1; - var oPNode=null; - if(aDataCon[i].oUsedItems) - { - var oUsedItems=aDataCon[i].oUsedItems; - do{ - if(oUsedItems.nB>aPos[i]) - { - aMaxPos[i]=oUsedItems.nB; - break; - } - oPNode=oUsedItems; - oUsedItems=oUsedItems.oN; - }while(oUsedItems!=null); - if(oPNode) - aMinPos[i]=oPNode.nE; - } - else if(aDataCon[i].aKs==null) - { - aMaxPos[i]=aMinPos[i]=aPos[i]; - } - if(aMinPos[i]>=aPos[i]||aMaxPos[i]<=aPos[i]) - { - aMaxPos[i]=aMinPos[i]=aPos[i]; - } -} - -function getIdxPos(oIdx,bDown,sK) -{ - var aKs=oIdx.aKs; - var nIdx; - if(bDown) - nIdx=oIdx.nNum; - else - nIdx=-1; - if(aKs!=null) - { - for(var i=0;i0) - { - nIdx=i; - break; - } - } - else - { - if(compare(aKs[i].sName,sK)<0) - nIdx=i; - else - break; - } - i+=aKs[i].nNKOff; - } - } - else if(oIdx.aKsOnly) - { - var aKsOnly=oIdx.aKsOnly; - for(var i=0;i0) - { - nIdx=i; - break; - } - } - else - { - if(compare(aKsOnly[i],sK)<0) - nIdx=i; - else - break; - } - } - } - } - return nIdx; -} - -function writeItems(oHTML,aDataCon,aPos,aMinPos,aMaxPos,bDown,nLevel) -{ - var aOldPos=new Array(); - for(var i=0;iaMinPos[i])) - { - if(sCurrentK==""|| - (bDown&&compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)>0)|| - (!bDown&&compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)<0)) - { - sCurrentK=aDataCon[i].aKs[aPos[i]].sName; - p=0; - aCurIdxSet[p++]=i; - } - else if(compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)==0){ - aCurIdxSet[p++]=i; - } - } - else if(nLevel==1&&aMaxPos[i]!=aMinPos[i]){ - if(bDown&&aPos[i]==aMaxPos[i]) - { - if(aDataCon[i].aKs) - { - gsSKA=aDataCon[i].aKs[aOldPos[i]].sName; - return false; - } - } - else if(!bDown&&aPos[i]==aMinPos[i]) - { - if(aDataCon[i].aKs) - { - gsSKB=aDataCon[i].aKs[aOldPos[i]].sName; - return false; - } - } - } - } - if(p>=1){ - for(var s=0;s0); - return true; -} - -function updateUsedK(aDataCon,aOriPos,aOldPos,bDown) -{ - for(var i=0;inB) - { - if(oUsedItems.nB==nE+1) - { - oUsedItems.nB=nB; - } - else{ - var oNewNode=new usedItems(oUsedItems.nB,oUsedItems.nE); - oNewNode.oN=oUsedItems.oN; - oUsedItems.nB=nB; - oUsedItems.nE=nE; - oUsedItems.oN=oNewNode; - } - break; - } - oPNode=oUsedItems; - oUsedItems=oUsedItems.oN; - }while(oUsedItems); - if(!oUsedItems) - { - if(oPNode!=null) - oPNode.oN=new usedItems(nB,nE); - } - if(oPNode!=null){ - if(oPNode.nE==oPNode.oN.nB-1) - { - oPNode.nE=oPNode.oN.nE; - oPNode.oN=oPNode.oN.oN; - } - } - } -} - -function projInfo(sPPath,sDPath,sFile) -{ - this.sPPath=sPPath; - this.sDPath=sDPath; - this.sFile=sFile; -} - -function addProjInfo(sPPath,sDPath,sFile) -{ - var oIdxInfo=new projInfo(sPPath,sDPath,sFile); - gaData[gaData.length]=oIdxInfo; - return oIdxInfo; -} - -function writeDataIFrame() -{ - if(gnLoad=nPos) return true; - oUsed=oUsed.oN; - } - return false; -} - -function getKByIdx(oCData,nB) -{ - var nRelPos=nB-(oCData.nTotal-oCData.nNum); - var aIKs=oCData.aKs; - if(nRelPos>=0&&aIKs&&nRelPos=0) - { - do{ - oK=aIKs[nRelPos--]; - } - while((oK.nType==3||isUsed(oCData,nRelPos+1))&&nRelPos>=0); - } - if(oK.nType!=3) - { - return oK.sName; - } - } - } - return null; -} - -function loadData2(sFileName) -{ - disEvt(); - if(gbXML) - loadDataXML(sFileName); - else - loadData(sFileName); - enEvt(); -} - -function projReady(aChunk) -{ - gaChunks[gnLoad++]=aChunk; - var len=aChunk.length; - var nTotal=0; - if(len>0) - nTotal=aChunk[len-1].nTotal; - gnItems+=nTotal; - if(nTotal>gnMaxItems) - { - gnMaxItems=nTotal; - gnRef=gnLoad-1; - } - setTimeout("writeDataIFrame();",1); -} - -function writeFakeItems() -{ - disEvt(); - gnUHeight=15; - var sHTML=getFakeItemsHTMLbyCount(0,gnItems); - document.body.insertAdjacentHTML("beforeEnd",sHTML); - var obj=getH6ById(0); - if (document.body != null) - { - gnVisible=Math.ceil(document.body.clientHeight/gnUHeight); - } - gaFakes[0]=new fakeItemsArea(0,gnItems,"",getEndString(),obj); - enEvt(); -} - -function getEndString() -{ - var sBC=getBiggestChar(); - return sBC+sBC+sBC+sBC+sBC+sBC+sBC+sBC; -} - -function getUnitIdx(nScrl,nHeight) -{ - if(gaFakes.length==0) - { - markEnd(); - return; - } - var nB=0; - var nE=gaFakes.length-1; - var nM=-1; - var nTop=0; - var nBtm=0; - var bF=false; - do{ - nM=(nB+nE)>>1; - nBtm=gaFakes[nM].getBtm(); - nTop=gaFakes[nM].getTop(); - - if(nTop>=nScrl+nHeight) - nE=nM-1; - else if(nBtm=nB); - if(bF) - { - if(nTop>=nScrl){ - gsSKA=gaFakes[nM].sKA; - gsSKB=null; - gnNeeded=Math.ceil((nHeight-nTop+nScrl)/gnUHeight); - gnIns=gaFakes[nM].nB; - checkReady(); - } - else if(nBtm<=nScrl+nHeight){ - gsSKB=gaFakes[nM].sKB; - gsSKA=null; - gnNeeded=Math.ceil((nBtm-nScrl+gnScrlMgn)/gnUHeight); - gbNeedCalc=true; - checkReady(); - } - else{ - gnNeeded=gnVisible; - var nUnitIdx=gaFakes[nM].nB+Math.floor((nScrl-nTop)/gnUHeight); - if (!showItemsInEvaluation(nUnitIdx)) - { - gsSKA=gaFakes[nM].sKA; - gsSKB=null; - gnNeeded=Math.ceil(nHeight/gnUHeight); - gnIns=gaFakes[nM].nB; - checkReady(); - } - } - } - else - markEnd(); -} - -function disEvt() -{ - window.onscroll=null; - window.onresize=null; -} - -function enEvt() -{ - window.onscroll=window_OnScroll; - window.onresize=window_OnResize; -} - -function insertIdxKs(nIns,oHTML,bScrl) -{ - var bRtn=true; - disEvt(); - var nCount=oHTML.nConsumed; - var nB=0; - var nE=gaFakes.length-1; - var nM=-1; - var bF=false; - do{ - nM=(nB+nE)>>1; - if(gaFakes[nM].nB>nIns) - nE=nM-1; - else if(gaFakes[nM].nB+gaFakes[nM].nNum<=nIns) - nB=nM+1; - else{ - bF=true; - break; - } - }while(nE>=nB); - if(bF) - { - var oFIA=gaFakes[nM]; - var nOffsetTop=oFIA.getTop(); - var nOffsetBottom=oFIA.getBtm(); - var nDelta=0; - var nHDiff=nIns-oFIA.nB; - var nTDiff=oFIA.nNum+oFIA.nB-(nIns+nCount); - if(nHDiff>0) - { - nDelta=oFIA.setNum(nHDiff); - var sOldKBefore=oFIA.sKB; - oFIA.sKB=oHTML.sFK; - if(nTDiff>0) - { - var sHTML=getFakeItemsHTMLbyCount(nIns,nTDiff); - oFIA.insertAdjacentHTML("afterEnd",sHTML); - var obj=getH6ById(nIns); - insertItemIntoArray(gaFakes,nM+1,new fakeItemsArea(nIns+nCount,nTDiff,oHTML.sLK,sOldKBefore,obj)); - } - oFIA.insertAdjacentHTML("afterEnd",oHTML.sHTML); - if(bScrl) - { - if(gbMac&&gbIE4) - { - var nScrollPos=nOffsetBottom-nDelta; - while(document.body.scrollTop!=nScrollPos) - document.body.scrollTop=nScrollPos; - } - else - window.scrollTo(0,nOffsetBottom-nDelta); - } - } - else{ - oFIA.insertAdjacentHTML("beforeBegin",oHTML.sHTML); - if(bScrl){ - if(gbMac&&gbIE4) - { - var nScrollPos=nOffsetTop; - while(document.body.scrollTop!=nScrollPos) - document.body.scrollTop=nScrollPos; - } - else - window.scrollTo(0,nOffsetTop); - } - - if(nTDiff>0) - { - oFIA.nB=nIns+nCount; - nDelta=oFIA.setNum(nTDiff); - oFIA.sKA=oHTML.sLK; - } - else{ - gaFakes[nM].setNum(0); - removeItemFromArray(gaFakes,nM); - } - } - } - else - bRtn=false; - enEvt(); - return bRtn; -} - -function window_OnScroll() -{ - gnSE++; - setTimeout("procScroll();",50); -} - -function procScroll() -{ - if(gnSE==1&&!gbProcess) - { - markBegin(); - getUnitIdx(document.body.scrollTop,document.body.clientHeight); - } - gnSE--; -} - -function window_OnResize() -{ - gnRE++; - setTimeout("procResize();",50); -} - -function procResize() -{ - if(gnRE==1&&!gbProcess) - { - markBegin(); - gnVisible=Math.ceil(document.body.clientHeight/gnUHeight); - if(gnIns==-1) - getUnitIdx(document.body.scrollTop,document.body.clientHeight); - } - gnRE--; -} - -function getChunkByIdx(nIdx,nPosition) -{ - var oCData=null; - if(nIdx0) - { - var nB=0; - var nE=len-1; - var bF=false; - do{ - var nM=(nB+nE)>>1; - if(nPositionnB); - if(bF) - oCData=gaChunks[nIdx][nE]; - else if(nPosition0) - { - var nB=0; - var nE=len-1; - var bF=false; - do{ - var nM=(nB+nE+(bDown?0:1))>>1; - if(bDown) - { - if(compare(sK,gaChunks[nIdx][nM].sEK)<0) - { - bF=true; - nE=nM; - } - else - nB=nM+1; - } - else - { - if(compare(sK,gaChunks[nIdx][nM].sBK)>0) - { - bF=true; - nB=nM; - } - else - nE=nM-1; - } - }while(nE>nB); - if(bF) - { - if(bDown) - nCandId=nE; - else - nCandId=nB; - } - else - { - if(bDown) - { - if(gaChunks[nIdx].length>nB&&compare(sK,gaChunks[nIdx][nB].sEK)<0) - nCandId=nB; - else - nCandId=gaChunks[nIdx].length-1; - } - else - { - if(0<=nE&&compare(sK,gaChunks[nIdx][nE].sBK)>0) - nCandId=nE; - else - nCandId=0; - } - } - return gaChunks[nIdx][nCandId]; - } - } - return null; -} - -function findCK() -{ - if(gsCK!=null) - { - gsSKA=gsCK; - gbFindCK=true; - gnNeeded=1; - markBegin(); - checkReady(); - } -} - -function writeLoadingDiv(nIIdx) -{ - return ""; -} - -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 index 46aeaa20c..000000000 --- a/doc/salome/gui/SMESH/whibody.htm +++ /dev/null @@ -1,284 +0,0 @@ - - -Index content - - - - - - - - - - - - - - - - - - - diff --git a/doc/salome/gui/SMESH/whidhtml.htm b/doc/salome/gui/SMESH/whidhtml.htm deleted file mode 100755 index feb7b2b21..000000000 --- a/doc/salome/gui/SMESH/whidhtml.htm +++ /dev/null @@ -1,30 +0,0 @@ - - -Index - - - - - - - - - diff --git a/doc/salome/gui/SMESH/whiform.htm b/doc/salome/gui/SMESH/whiform.htm deleted file mode 100755 index d412744b0..000000000 --- a/doc/salome/gui/SMESH/whiform.htm +++ /dev/null @@ -1,91 +0,0 @@ - - -Index form - - - - - - - - - - - - - - diff --git a/doc/salome/gui/SMESH/whihost.js b/doc/salome/gui/SMESH/whihost.js deleted file mode 100755 index d48c493ee..000000000 --- a/doc/salome/gui/SMESH/whihost.js +++ /dev/null @@ -1,424 +0,0 @@ -// WebHelp 5.10.002 -var gsDefaultTarget="bsscright"; -var gsBgColor="#ffffff"; -var gsBgImage=""; -var goIdxFont=null; -var goIdxEmptyFont=null; -var goIdxHoverFont=null; -var gsIdxMargin="0pt"; -var gsIdxIndent="8pt"; -var gsIdxActiveBgColor="#cccccc"; -var gsCK = null; -var gsBCK = null; -var gbCR = false; -var gbBCR = false; -var gbWhIHost=true; - -function myEvent() -{ - this.pageX = 0; - this.pageY = 0; -} -var _event=new myEvent(); - -function setBackgroundcolor(sBgColor) -{ - gsBgColor=sBgColor; -} - -function setBackground(sBgImage) -{ - gsBgImage=sBgImage; -} - -function setFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration) -{ - var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration); - if(sType=="Normal") - goIdxFont=vFont; - else if(sType=="Empty") - goIdxEmptyFont=vFont; - else if(sType=="Hover") - goIdxHoverFont=vFont; -} - -function setActiveBgColor(sBgColor) -{ - gsIdxActiveBgColor=sBgColor; -} - -function setMargin(sMargin) -{ - gsIdxMargin=sMargin; -} - -function setIndent(sIndent) -{ - gsIdxIndent=sIndent; -} - -function writeOneItem(oHTML,bDown,aDataCon,aCurIdxSet,nLength,aPos,nLevel) -{ - var sHTML=""; - var nIdxSet=aCurIdxSet[0]; - var nIIdx=aPos[nIdxSet]; - var sKOriName=getItemName(aDataCon,nIdxSet,nIIdx); - var sKName=_textToHtml(sKOriName); - - var nIdxIndent=parseInt(gsIdxIndent); - var sTopics=""; - if(nLevel==1){ - if(getItemType(aDataCon,nIdxSet,nIIdx)==1) - { - sHTML+="
    "; - sHTML+=""+sKName+"
    "; - } - else{ - for(var i=0;i"; - sHTML+="0) - sHTML+=sTopics+");return false;\">"+sKName+"

    "; - else - sHTML+=");return false;\" style=\""+getFontStyle(goIdxEmptyFont)+"\">"+sKName+"

    "; - } - } - else if(nLevel>=2){ - var nIndent=nIdxIndent*nLevel; - for(var i=0;i"; - else - sHTML+="
    "; - sHTML+="0) - sHTML+=sTopics+");return false;\">"+sKName+"
    "; - else - sHTML+=");return false;\" style=\""+getFontStyle(goIdxEmptyFont)+"\">"+sKName+""; - } - oHTML.addHTML(sHTML,nLength,bDown,(nLevel==1),sKOriName); -} - -function getTargetName(aDataCon,nIdxSet,nIIdx) -{ - if(nIdxSetnIIdx) - if(aDataCon[nIdxSet].aKs[nIIdx].sTarget) - return aDataCon[nIdxSet].aKs[nIIdx].sTarget; - return gsDefaultTarget; -} - -function mergeItems(oHTML,bDown,aDataCon,aCurIdxSet,nLength,aPos,nLevel) -{ - var oLocalHTML=new indexHTMLPart(); - writeOneItem(oLocalHTML,bDown,aDataCon,aCurIdxSet,nLength,aPos,nLevel); - - var aLocalPos=new Array(); - var aMaxPos=new Array(); - for(var i=0;i0) - aMaxPos[aCurIdxSet[i]]=aLocalPos[aCurIdxSet[i]]+nNKOff; - } - var oSubHTML=new indexHTMLPart(); - writeItems(oSubHTML,aDataCon,aLocalPos,null,aMaxPos,true,nLevel+1); - oLocalHTML.addSubHTML(oSubHTML,true); - oHTML.appendHTML(oLocalHTML,bDown); -} - -function adjustPosition(bDown,aDataCon,aCurIdxSet,nLength,aPos) -{ - if(bDown) - { - for(var i=0;inIIdx) - return aDataCon[nIdxSet].aKs[nIIdx].sName; - else - return null; -} - -function getItemType(aDataCon,nIdxSet,nIIdx) -{ - if(nIdxSetnIIdx) - return aDataCon[nIdxSet].aKs[nIIdx].nType; - else - return 0; -} - -function getNKOff(aDataCon,nIdxSet,nIIdx) -{ - if(nIdxSetnIIdx) - return aDataCon[nIdxSet].aKs[nIIdx].nNKOff; - else - return null; -} - -function getPKOff(aDataCon,nIdxSet,nIIdx) -{ - if(nIdxSetnIIdx) - return aDataCon[nIdxSet].aKs[nIIdx].nPKOff; - else - return null; -} - -function window_OnLoad() -{ - if(gsBgImage&&gsBgImage.length>0) - { - document.body.background=gsBgImage; - } - if(gsBgColor&&gsBgColor.length>0) - { - document.body.bgColor=gsBgColor; - } - document.body.insertAdjacentHTML("beforeEnd",writeLoadingDiv()); - loadIdx(); - var oMsg=new whMessage(WH_MSG_SHOWIDX,this,1,null) - SendMessage(oMsg); -} - -function loadIdx() -{ - if(!gbReady) - { - var oResMsg=new whMessage(WH_MSG_GETPROJINFO,this,1,null); - if(SendMessage(oResMsg)&&oResMsg.oParam) - { - gbReady=true; - var oProj=oResMsg.oParam; - var aProj=oProj.aProj; - gbXML=oProj.bXML; - if(aProj.length>0) - { - var sLangId=aProj[0].sLangId; - for(var i=0;inIIdx) - { - if(aDataCon[nIdxSet].aKs[nIIdx].aTopics) - { - var nLen=aDataCon[nIdxSet].aKs[nIIdx].aTopics.length; - var nProj=aDataCon[nIdxSet].nProjId; - var sPath=gaData[nProj].sPPath; - for(var i=0;i>1; - sItem=getInnerText(oP[nM]); - - if(compare(sItem,sK)==0) - { - bF=true; - break; - } - else if(compare(sItem,sK)>0) - nE=nM-1; - else if(compare(sItem,sK)<0) - nB=nM; - } - if(!bF) - { - if(nB==nE) nM=nB; - - if(nM+10){ - var nbTag=getElementsByTag(oMatch,"NOBR"); - if(nbTag&&nbTag.length>0) - HighLightElement(nbTag[0], gsIdxActiveBgColor, "transparent"); - if (gbCR) - { - if (gbIE4) - tempColl(0).click(); - else - { - var strCommand = tempColl[0].getAttribute("onClick"); - var nstrCommand = strCommand.indexOf(";"); - strCommand = strCommand.substring(0, nstrCommand); - strCommand = strCommand.replace("event", "_event"); - window._event.pageX = oMatch.offsetLeft ; - window._event.pageY = oMatch.offsetTop + 20; - window.setTimeout(strCommand, 100); - } - } - } - } - gsCK=gsBCK; - gbCR=gbBCR; - if(gsBCK!=null) - { - gsBCK=null; - gbBCR=false; - findCK(); - return false; - } - - } - return true; -} - -function clearHighLight() -{ - resetHighLight(gsBgColor); -} - -function IndexWriteClassStyle() -{ - var sStyle=""; - sStyle+=""; - document.write(sStyle); - return; -} - -function window_Unload() -{ - UnRegisterListener2(this,WH_MSG_PROJECTREADY); - UnRegisterListener2(this,WH_MSG_SEARCHINDEXKEY); -} - -function onSendMessage(oMsg) -{ - if(oMsg) - { - var nMsgId=oMsg.nMessageId; - if(nMsgId==WH_MSG_SEARCHINDEXKEY) - { - if(oMsg.oParam && oMsg.oParam.sInput) - { - if(gsCK==null) - { - gsCK=oMsg.oParam.sInput; - gbCR = oMsg.oParam.bCR; - findCK(); - } - else - { - gsBCK=oMsg.oParam.sInput; - gbBCR = oMsg.oParam.bCR; - } - } - } - else if(nMsgId==WH_MSG_PROJECTREADY) - { - loadIdx(); - } - } - return true; -} - -if(window.gbWhVer&&window.gbWhLang&&window.gbWhMsg&&window.gbWhUtil&&window.gbWhHost&&window.gbWhProxy) -{ - RegisterListener2(this,WH_MSG_PROJECTREADY); - RegisterListener2(this,WH_MSG_SEARCHINDEXKEY); - goIdxFont=new whFont("Verdana","8pt","#000000","normal","normal","none"); - goIdxEmptyFont=new whFont("Verdana","8pt","#666666","normal","normal","none"); - goIdxHoverFont=new whFont("Verdana","8pt","#007f00","normal","normal","underline"); - - window.onload=window_OnLoad; - window.onbeforeunload=window_BUnload; - window.onunload=window_Unload; - gbWhIHost=true; -} -else - document.location.reload(); - diff --git a/doc/salome/gui/SMESH/whlang.js b/doc/salome/gui/SMESH/whlang.js deleted file mode 100755 index fb848c513..000000000 --- a/doc/salome/gui/SMESH/whlang.js +++ /dev/null @@ -1,453 +0,0 @@ -// WebHelp 5.10.001 -var garrSortChar=new Array(); -var gaFtsStop=new Array(); -var gaFtsStem=new Array(); -var gbWhLang=false; - -garrSortChar[0] = 0; -garrSortChar[1] = 1; -garrSortChar[2] = 2; -garrSortChar[3] = 3; -garrSortChar[4] = 4; -garrSortChar[5] = 5; -garrSortChar[6] = 6; -garrSortChar[7] = 7; -garrSortChar[8] = 8; -garrSortChar[9] = 40; -garrSortChar[10] = 41; -garrSortChar[11] = 42; -garrSortChar[12] = 43; -garrSortChar[13] = 44; -garrSortChar[14] = 9; -garrSortChar[15] = 10; -garrSortChar[16] = 11; -garrSortChar[17] = 12; -garrSortChar[18] = 13; -garrSortChar[19] = 14; -garrSortChar[20] = 15; -garrSortChar[21] = 16; -garrSortChar[22] = 17; -garrSortChar[23] = 18; -garrSortChar[24] = 19; -garrSortChar[25] = 20; -garrSortChar[26] = 21; -garrSortChar[27] = 22; -garrSortChar[28] = 23; -garrSortChar[29] = 24; -garrSortChar[30] = 25; -garrSortChar[31] = 26; -garrSortChar[32] = 38; -garrSortChar[33] = 45; -garrSortChar[34] = 46; -garrSortChar[35] = 47; -garrSortChar[36] = 48; -garrSortChar[37] = 49; -garrSortChar[38] = 50; -garrSortChar[39] = 33; -garrSortChar[40] = 51; -garrSortChar[41] = 52; -garrSortChar[42] = 53; -garrSortChar[43] = 88; -garrSortChar[44] = 54; -garrSortChar[45] = 34; -garrSortChar[46] = 55; -garrSortChar[47] = 56; -garrSortChar[48] = 115; -garrSortChar[49] = 119; -garrSortChar[50] = 121; -garrSortChar[51] = 123; -garrSortChar[52] = 125; -garrSortChar[53] = 126; -garrSortChar[54] = 127; -garrSortChar[55] = 128; -garrSortChar[56] = 129; -garrSortChar[57] = 130; -garrSortChar[58] = 57; -garrSortChar[59] = 58; -garrSortChar[60] = 89; -garrSortChar[61] = 90; -garrSortChar[62] = 91; -garrSortChar[63] = 59; -garrSortChar[64] = 60; -garrSortChar[65] = 131; -garrSortChar[66] = 148; -garrSortChar[67] = 150; -garrSortChar[68] = 154; -garrSortChar[69] = 158; -garrSortChar[70] = 168; -garrSortChar[71] = 171; -garrSortChar[72] = 173; -garrSortChar[73] = 175; -garrSortChar[74] = 185; -garrSortChar[75] = 187; -garrSortChar[76] = 189; -garrSortChar[77] = 191; -garrSortChar[78] = 193; -garrSortChar[79] = 197; -garrSortChar[80] = 214; -garrSortChar[81] = 216; -garrSortChar[82] = 218; -garrSortChar[83] = 220; -garrSortChar[84] = 225; -garrSortChar[85] = 230; -garrSortChar[86] = 240; -garrSortChar[87] = 242; -garrSortChar[88] = 244; -garrSortChar[89] = 246; -garrSortChar[90] = 252; -garrSortChar[91] = 61; -garrSortChar[92] = 62; -garrSortChar[93] = 63; -garrSortChar[94] = 64; -garrSortChar[95] = 66; -garrSortChar[96] = 67; -garrSortChar[97] = 131; -garrSortChar[98] = 148; -garrSortChar[99] = 150; -garrSortChar[100] = 154; -garrSortChar[101] = 158; -garrSortChar[102] = 168; -garrSortChar[103] = 171; -garrSortChar[104] = 173; -garrSortChar[105] = 175; -garrSortChar[106] = 185; -garrSortChar[107] = 187; -garrSortChar[108] = 189; -garrSortChar[109] = 191; -garrSortChar[110] = 193; -garrSortChar[111] = 197; -garrSortChar[112] = 214; -garrSortChar[113] = 216; -garrSortChar[114] = 218; -garrSortChar[115] = 220; -garrSortChar[116] = 225; -garrSortChar[117] = 230; -garrSortChar[118] = 240; -garrSortChar[119] = 242; -garrSortChar[120] = 244; -garrSortChar[121] = 246; -garrSortChar[122] = 252; -garrSortChar[123] = 68; -garrSortChar[124] = 69; -garrSortChar[125] = 70; -garrSortChar[126] = 71; -garrSortChar[127] = 27; -garrSortChar[128] = 114; -garrSortChar[129] = 28; -garrSortChar[130] = 82; -garrSortChar[131] = 170; -garrSortChar[132] = 85; -garrSortChar[133] = 112; -garrSortChar[134] = 109; -garrSortChar[135] = 110; -garrSortChar[136] = 65; -garrSortChar[137] = 113; -garrSortChar[138] = 223; -garrSortChar[139] = 86; -garrSortChar[140] = 213; -garrSortChar[141] = 29; -garrSortChar[142] = 255; -garrSortChar[143] = 30; -garrSortChar[144] = 31; -garrSortChar[145] = 80; -garrSortChar[146] = 81; -garrSortChar[147] = 83; -garrSortChar[148] = 84; -garrSortChar[149] = 111; -garrSortChar[150] = 36; -garrSortChar[151] = 37; -garrSortChar[152] = 79; -garrSortChar[153] = 229; -garrSortChar[154] = 222; -garrSortChar[155] = 87; -garrSortChar[156] = 212; -garrSortChar[157] = 32; -garrSortChar[158] = 254; -garrSortChar[159] = 251; -garrSortChar[160] = 39; -garrSortChar[161] = 72; -garrSortChar[162] = 97; -garrSortChar[163] = 98; -garrSortChar[164] = 99; -garrSortChar[165] = 100; -garrSortChar[166] = 73; -garrSortChar[167] = 101; -garrSortChar[168] = 74; -garrSortChar[169] = 102; -garrSortChar[170] = 133; -garrSortChar[171] = 93; -garrSortChar[172] = 103; -garrSortChar[173] = 35; -garrSortChar[174] = 104; -garrSortChar[175] = 75; -garrSortChar[176] = 105; -garrSortChar[177] = 92; -garrSortChar[178] = 122; -garrSortChar[179] = 124; -garrSortChar[180] = 76; -garrSortChar[181] = 106; -garrSortChar[182] = 107; -garrSortChar[183] = 108; -garrSortChar[184] = 77; -garrSortChar[185] = 120; -garrSortChar[186] = 199; -garrSortChar[187] = 94; -garrSortChar[188] = 116; -garrSortChar[189] = 117; -garrSortChar[190] = 118; -garrSortChar[191] = 78; -garrSortChar[192] = 131; -garrSortChar[193] = 131; -garrSortChar[194] = 131; -garrSortChar[195] = 131; -garrSortChar[196] = 131; -garrSortChar[197] = 131; -garrSortChar[198] = 131; -garrSortChar[199] = 150; -garrSortChar[200] = 158; -garrSortChar[201] = 158; -garrSortChar[202] = 158; -garrSortChar[203] = 158; -garrSortChar[204] = 175; -garrSortChar[205] = 175; -garrSortChar[206] = 175; -garrSortChar[207] = 175; -garrSortChar[208] = 154; -garrSortChar[209] = 193; -garrSortChar[210] = 197; -garrSortChar[211] = 197; -garrSortChar[212] = 197; -garrSortChar[213] = 197; -garrSortChar[214] = 197; -garrSortChar[215] = 95; -garrSortChar[216] = 197; -garrSortChar[217] = 230; -garrSortChar[218] = 230; -garrSortChar[219] = 230; -garrSortChar[220] = 230; -garrSortChar[221] = 246; -garrSortChar[222] = 227; -garrSortChar[223] = 224; -garrSortChar[224] = 131; -garrSortChar[225] = 131; -garrSortChar[226] = 131; -garrSortChar[227] = 131; -garrSortChar[228] = 131; -garrSortChar[229] = 131; -garrSortChar[230] = 131; -garrSortChar[231] = 150; -garrSortChar[232] = 158; -garrSortChar[233] = 158; -garrSortChar[234] = 158; -garrSortChar[235] = 158; -garrSortChar[236] = 175; -garrSortChar[237] = 175; -garrSortChar[238] = 175; -garrSortChar[239] = 175; -garrSortChar[240] = 154; -garrSortChar[241] = 193; -garrSortChar[242] = 197; -garrSortChar[243] = 197; -garrSortChar[244] = 197; -garrSortChar[245] = 197; -garrSortChar[246] = 197; -garrSortChar[247] = 96; -garrSortChar[248] = 197; -garrSortChar[249] = 230; -garrSortChar[250] = 230; -garrSortChar[251] = 230; -garrSortChar[252] = 230; -garrSortChar[253] = 246; -garrSortChar[254] = 227; -garrSortChar[255] = 250; - -gaFtsStop[0] = "a"; -gaFtsStop[1] = "about"; -gaFtsStop[2] = "after"; -gaFtsStop[3] = "against"; -gaFtsStop[4] = "all"; -gaFtsStop[5] = "also"; -gaFtsStop[6] = "among"; -gaFtsStop[7] = "an"; -gaFtsStop[8] = "and"; -gaFtsStop[9] = "are"; -gaFtsStop[10] = "as"; -gaFtsStop[11] = "at"; -gaFtsStop[12] = "be"; -gaFtsStop[13] = "became"; -gaFtsStop[14] = "because"; -gaFtsStop[15] = "been"; -gaFtsStop[16] = "between"; -gaFtsStop[17] = "but"; -gaFtsStop[18] = "by"; -gaFtsStop[19] = "can"; -gaFtsStop[20] = "come"; -gaFtsStop[21] = "do"; -gaFtsStop[22] = "during"; -gaFtsStop[23] = "each"; -gaFtsStop[24] = "early"; -gaFtsStop[25] = "for"; -gaFtsStop[26] = "form"; -gaFtsStop[27] = "found"; -gaFtsStop[28] = "from"; -gaFtsStop[29] = "had"; -gaFtsStop[30] = "has"; -gaFtsStop[31] = "have"; -gaFtsStop[32] = "he"; -gaFtsStop[33] = "her"; -gaFtsStop[34] = "his"; -gaFtsStop[35] = "however"; -gaFtsStop[36] = "in"; -gaFtsStop[37] = "include"; -gaFtsStop[38] = "into"; -gaFtsStop[39] = "is"; -gaFtsStop[40] = "it"; -gaFtsStop[41] = "its"; -gaFtsStop[42] = "late"; -gaFtsStop[43] = "later"; -gaFtsStop[44] = "made"; -gaFtsStop[45] = "many"; -gaFtsStop[46] = "may"; -gaFtsStop[47] = "me"; -gaFtsStop[48] = "med"; -gaFtsStop[49] = "more"; -gaFtsStop[50] = "most"; -gaFtsStop[51] = "near"; -gaFtsStop[52] = "no"; -gaFtsStop[53] = "non"; -gaFtsStop[54] = "not"; -gaFtsStop[55] = "of"; -gaFtsStop[56] = "on"; -gaFtsStop[57] = "only"; -gaFtsStop[58] = "or"; -gaFtsStop[59] = "other"; -gaFtsStop[60] = "over"; -gaFtsStop[61] = "several"; -gaFtsStop[62] = "she"; -gaFtsStop[63] = "some"; -gaFtsStop[64] = "such"; -gaFtsStop[65] = "than"; -gaFtsStop[66] = "that"; -gaFtsStop[67] = "the"; -gaFtsStop[68] = "their"; -gaFtsStop[69] = "then"; -gaFtsStop[70] = "there"; -gaFtsStop[71] = "these"; -gaFtsStop[72] = "they"; -gaFtsStop[73] = "this"; -gaFtsStop[74] = "through"; -gaFtsStop[75] = "to"; -gaFtsStop[76] = "under"; -gaFtsStop[77] = "until"; -gaFtsStop[78] = "use"; -gaFtsStop[79] = "was"; -gaFtsStop[80] = "we"; -gaFtsStop[81] = "were"; -gaFtsStop[82] = "when"; -gaFtsStop[83] = "where"; -gaFtsStop[84] = "which"; -gaFtsStop[85] = "who"; -gaFtsStop[86] = "with"; -gaFtsStop[87] = "you"; - -gaFtsStem[0] = "ed"; -gaFtsStem[1] = "es"; -gaFtsStem[2] = "er"; -gaFtsStem[3] = "e"; -gaFtsStem[4] = "s"; -gaFtsStem[5] = "ingly"; -gaFtsStem[6] = "ing"; -gaFtsStem[7] = "ly"; - - -// as javascript 1.3 support unicode instead of ISO-Latin-1 -// need to transfer come code back to ISO-Latin-1 for compare purpose -// Note: Different Language(Code page) maybe need different array: -var gaUToC=new Array(); -gaUToC[8364]=128; -gaUToC[8218]=130; -gaUToC[402]=131; -gaUToC[8222]=132; -gaUToC[8230]=133; -gaUToC[8224]=134; -gaUToC[8225]=135; -gaUToC[710]=136; -gaUToC[8240]=137; -gaUToC[352]=138; -gaUToC[8249]=139; -gaUToC[338]=140; -gaUToC[381]=142; -gaUToC[8216]=145; -gaUToC[8217]=146; -gaUToC[8220]=147; -gaUToC[8221]=148; -gaUToC[8226]=149; -gaUToC[8211]=150; -gaUToC[8212]=151; -gaUToC[732]=152; -gaUToC[8482]=153; -gaUToC[353]=154; -gaUToC[8250]=155; -gaUToC[339]=156; -gaUToC[382]=158; -gaUToC[376]=159; - -var gsBiggestChar=""; -function getBiggestChar() -{ - if(gsBiggestChar.length==0) - { - if(garrSortChar.length<256) - gsBiggestChar=String.fromCharCode(255); - else - { - var nBiggest=0; - var nBigChar=0; - for(var i=0;i<=255;i++) - { - if(garrSortChar[i]>nBiggest) - { - nBiggest=garrSortChar[i]; - nBigChar=i; - } - } - gsBiggestChar=String.fromCharCode(nBigChar); - } - - } - return gsBiggestChar; -} - -function getCharCode(str,i) -{ - var code=str.charCodeAt(i) - if(code>256) - { - code=gaUToC[code]; - } - return code; -} - -function compare(strText1,strText2) -{ - if(garrSortChar.length<256) - { - var strt1=strText1.toLowerCase(); - var strt2=strText2.toLowerCase(); - if(strt1strt2) return 1; - return 0; - } - else - { - for(var i=0;igarrSortChar[getCharCode(strText2,i)]) return 1; - } - if(strText1.lengthstrText2.length) return 1; - return 0; - } -} -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 index 8fd89b275..000000000 --- a/doc/salome/gui/SMESH/whmozemu.js +++ /dev/null @@ -1,67 +0,0 @@ -// WebHelp 5.10.002 -if (! window.gbIE4 && window.gbNav6 && !document.childNodes[0].insertAdjacentHTML){ - -HTMLElement.prototype.insertAdjacentElement = function(where,parsedNode) -{ - switch (where){ - case 'beforeBegin': - this.parentNode.insertBefore(parsedNode,this); - break; - case 'afterBegin': - this.insertBefore(parsedNode,this.firstChild); - break; - case 'beforeEnd': - this.appendChild(parsedNode); - break; - case 'afterEnd': - if (this.nextSibling){ - this.parentNode.insertBefore(parsedNode,this.nextSibling); - } else { - this.parentNode.appendChild(parsedNode); - } - break; - } -} - -HTMLElement.prototype.insertAdjacentHTML = function(where,htmlStr){ - - var r = this.ownerDocument.createRange(); - r.setStartBefore(this); - var parsedHTML = r.createContextualFragment(htmlStr); - this.insertAdjacentElement(where,parsedHTML); -} - - -HTMLElement.prototype.insertAdjacentText = function(where,txtStr){ - - var parsedText = document.createTextNode(txtStr); - this.insertAdjacentElement(where,parsedText); -} -} - -function testScroll() { - // Initialize scrollbar cache if necessary - if (window._pageXOffset==null) { - window._pageXOffset = window.pageXOffset; - window._pageYOffset = window.pageYOffset; - } - // Expose Internet Explorer compatible object model - document.scrollTop = window.pageYOffset; - document.scrollLeft = window.pageXOffset; - window.document.scrollHeight = document.height; - window.document.scrollWidth = document.width; - window.document.clientWidth = window.innerWidth; - window.document.clientHeight = window.innerHeight; - - // If cache!=current values, call the onscroll event - if (((window.pageXOffset!=window._pageXOffset) || (window.pageYOffset!=window._pageYOffset)) && (window.onscroll)) - window.onscroll(); - // Cache new values - window._pageXOffset = window.pageXOffset; - window._pageYOffset = window.pageYOffset; - } - -// Create compatibility layer for Netscape -if (window.gbNav6 && !window.gbNav7) { - setInterval("testScroll()",50) -} \ 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 index 492114be7..000000000 --- a/doc/salome/gui/SMESH/whmsg.js +++ /dev/null @@ -1,69 +0,0 @@ -// WebHelp 5.10.002 -var WH_MSG_RESIZEPANE =0x0100; -var WH_MSG_SHOWPANE =0x0101; -var WH_MSG_HIDEPANE =0x0102; -var WH_MSG_SYNCTOC =0x0103; -var WH_MSG_NEXT =0x0104; -var WH_MSG_PREV =0x0105; -var WH_MSG_NOSEARCHINPUT =0x0106; -var WH_MSG_NOSYNC =0x0107; -var WH_MSG_ENABLEWEBSEARCH =0x0108; - -var WH_MSG_ISPANEVISIBLE =0x0109; -var WH_MSG_PANESTATUE =0x010a; - -var WH_MSG_SYNCINFO =0x010b; -var WH_MSG_PANEINFO =0x010c; -var WH_MSG_WEBSEARCH =0x010d; - -var WH_MSG_SEARCHINDEXKEY =0x0201; - -var WH_MSG_SEARCHFTSKEY =0x020a; - -var WH_MSG_PROJECTREADY =0x0301; -var WH_MSG_GETPROJINFO =0x0302; - -var WH_MSG_SHOWTOC =0x0401; -var WH_MSG_SHOWIDX =0x0402; -var WH_MSG_SHOWFTS =0x0403; -var WH_MSG_SHOWGLO =0x0404; - -var WH_MSG_SHOWGLODEF =0x0500; - -var WH_MSG_GETTOCPATHS =0x0600; -var WH_MSG_GETAVIAVENUES =0x0601; -var WH_MSG_GETCURRENTAVENUE =0x0602; -var WH_MSG_GETPANEINFO =0x0603; -var WH_MSG_AVENUEINFO =0x0604; - -var WH_MSG_GETSTARTFRAME =0x0701; -var WH_MSG_GETDEFAULTTOPIC =0x0702; - -var WH_MSG_SEARCHTHIS =0x0801; -var WH_MSG_GETSEARCHS =0x0802; - -var WH_MSG_ISINFRAMESET =0x0900; - -var WH_MSG_TOOLBARORDER =0x0a00; -var WH_MSG_MINIBARORDER =0x0a01; -var WH_MSG_ISSYNCSSUPPORT =0x0a02; -var WH_MSG_ISSEARCHSUPPORT =0x0a03; -var WH_MSG_GETPANETYPE =0x0a04; -var WH_MSG_BACKUPSEARCH =0x0a05; -var WH_MSG_GETPANES =0x0a06; -var WH_MSG_INITSEARCHSTRING =0x0a07; -var WH_MSG_RELOADNS6 =0x0a08; -var WH_MSG_ISAVENUESUPPORT =0x0a09; - -var WH_MSG_GETCMD =0x0b00; -var WH_MSG_GETPANE =0x0b01; -var WH_MSG_GETDEFPANE =0x0b02; - -function whMessage(nMessageId,wSender,nVersion,oParam) -{ - this.nMessageId=nMessageId; - this.wSender=wSender; - this.nVersion=nVersion; - this.oParam=oParam; -} -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 index 2b71c7972..000000000 --- a/doc/salome/gui/SMESH/whnjs.htm +++ /dev/null @@ -1,25 +0,0 @@ - - -Mesh Module Reference Manual - - - - - - - - - - - -<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> - diff --git a/doc/salome/gui/SMESH/whphost.js b/doc/salome/gui/SMESH/whphost.js deleted file mode 100755 index b8f74f46f..000000000 --- a/doc/salome/gui/SMESH/whphost.js +++ /dev/null @@ -1,581 +0,0 @@ -// WebHelp 5.10.005 -var gaProj=new Array(); -var gnChecked=0; -var gsProjName=""; -var gbReady=false; -var goMan=null; -var gbXML=false; -var gsFirstPane=""; -var gServerEnabled=false; -var gsPath=""; -var gbWhPHost=false; -var goDiv = null; -var gsHTML = ""; - -if (navigator.currentNavPen) - gsFirstPane = navigator.currentNavPen; - - -function delayLoad() -{ - if (goDiv&&gsHTML) - { - goDiv.innerHTML=gsHTML; - goDiv=null; - gsHTML=""; - } -} - -function whCom(sName,sComFile) -{ - this.msName=sName; - this.msDivId=sName+"Div"; - this.msIFrameId=sName+"IFrame"; - this.msComFile=sComFile; - this.mbloaded=false; - this.mbShow=false; - this.show=function(bShow) - { - if(this.mbShow!=bShow) - { - if(bShow&&!this.mbloaded) - { - this.load(); - } - - var oDiv=getElement(this.msDivId); - if(oDiv) - { - if(gbIE55||(gbIE5&&gbMac)) - { - var oIframe=getElement(this.msIFrameId); - if(oIframe) - { - if(bShow) - { - oDiv.style.zIndex=3; - if(oIframe!=null) - { - oIframe.style.zIndex=3; - if (!gbIE55) - oIframe.style.visibility="visible"; - } - } - else - { - oDiv.style.zIndex=2; - if(oIframe!=null) - { - oIframe.style.zIndex=2; - if (!gbIE55) - oIframe.style.visibility="hidden"; - } - } - } - } - if (!gbIE55) - oDiv.style.visibility=(bShow==true)?'visible':'hidden'; - this.mbShow=bShow; - } - - } - } - this.load=function() - { - if(!this.mbloaded) - { - if(this.msComFile.length>0){ - var strFile= _getFullPath(getPath(), this.msComFile); - var oDiv=getElement(this.msDivId); - if(oDiv){ - if(gbIE4||gbOpera7){ - var nIFrameHeight=oDiv.style.pixelHeight; - var nIFrameWidth=oDiv.style.pixelWidth; - var sHTML=""; - }else{ - sHTML+="100%; height:100%;\">"; - } - oDiv.innerHTML=sHTML; - }else if(gbNav6){ - gsHTML=""; - goDiv = oDiv; - setTimeout("delayLoad()", 100); - } - this.mbloaded=true; - } - } - } - } - this.unload=function() - { - var oDiv=getElement(this.msDivId); - if(oDiv) - oDiv.innerHTML=""; - } - this.getDivHTML=function() - { - var sHTML=""; - if(gbMac&&gbIE4) - sHTML+="
    "; - else if(gbIE5) - sHTML+="
    "; - else if(gbIE4||gbWindows) - sHTML+="
    "; - else - sHTML+="
    "; - sHTML+="
    "; - return sHTML; - } -} - -function whComMan() -{ - this.sName=""; - this.maCom=new Array(); - this.addCom=function(sName,sComFile) - { - var owhCom=new whCom(sName,sComFile); - this.maCom[this.maCom.length]=owhCom; - } - this.init=function() - { - var sHTML=""; - for(var i=0;i0) - { - if(oMsg.oParam==1) - gsFirstPane="toc"; - else if(oMsg.oParam==2) - gsFirstPane="idx"; - else if(oMsg.oParam==3) - gsFirstPane="fts"; - else if(oMsg.oParam==4) - gsFirstPane="glo"; - } - else if(oMsg.oParam==0) - { - bHidePane=true; - } - } - goMan.init(); - if(gsProjName!="") - loadData2(gsProjName); - if (bHidePane) - { - gsFirstPane=""; - var oMsg1=new whMessage(WH_MSG_HIDEPANE, this, 1, null) - SendMessage(oMsg1); - } - else - { - if(gsFirstPane!="") - goMan.show(gsFirstPane); - else - goMan.showById(0); - } -} - -function setServerEnabled() -{ - gServerEnabled = true; -} - -function loadData2(strFile) -{ - if(gbXML) - loadDataXML(strFile); - else - loadData(strFile); -} - -function addProject(bPreferXML,sXMLName,sHTMLName) -{ - var bLoadXML=bPreferXML; - if(!gbIE4&&!gbNav6&&!gbOpera7) - return; - if(gbIE4&&!gbIE5) - bLoadXML=false; - if (gbIE5&&!gbMac) - bLoadXML=true; - if(gbIE55||gbNav6) - bLoadXML=true; - if(gbOpera7) - bLoadXML=false; - if(bLoadXML) - addProjectXML(sXMLName); - else - addProjectHTML(sHTMLName); -} - -function addProjectHTML(sName) -{ - gbXML=false; - gsProjName=sName; -} - -function addProjectXML(sName) -{ - gbXML=true; - gsProjName=sName; -} - -function window_MyBunload() -{ - goMan.unload(); - window_BUnload(); -} - -function putDataXML(xmlDoc,sdocPath) -{ - if(xmlDoc!=null) - { - var projectNode=xmlDoc.getElementsByTagName("project")[0]; - if(projectNode) - { - var aRProj=new Array(); - aRProj[0]=new Object(); - aRProj[0].sPPath=_getPath(sdocPath); - var sLangId=projectNode.getAttribute("langid"); - if(sLangId) - { - aRProj[0].sLangId=sLangId; - } - var sDPath=projectNode.getAttribute("datapath"); - if(sDPath) - { - if(sDPath.lastIndexOf("/")!=sDPath.length-1) - sDPath+="/"; - aRProj[0].sDPath=sDPath; - } - else - aRProj[0].sDPath=""; - aRProj[0].sToc=projectNode.getAttribute("toc"); - aRProj[0].sIdx=projectNode.getAttribute("index"); - aRProj[0].sFts=projectNode.getAttribute("fts"); - aRProj[0].sGlo=projectNode.getAttribute("glossary"); - var RmtProject=projectNode.getElementsByTagName("remote"); - var nCount=1; - for (var i=0;i 1 && document.body.clientHeight>1) - { - var oMsg = new whMessage(WH_MSG_RESIZEPANE, this, 1, null); - SendMessage(oMsg); - } - } -} - -function window_unload() -{ - UnRegisterListener2(this,WH_MSG_GETPROJINFO); - UnRegisterListener2(this,WH_MSG_SHOWTOC); - UnRegisterListener2(this,WH_MSG_SHOWIDX); - UnRegisterListener2(this,WH_MSG_SHOWFTS); - UnRegisterListener2(this,WH_MSG_SHOWGLO); - UnRegisterListener2(this,WH_MSG_GETPANEINFO); -} - -function onSendMessage(oMsg) -{ - if(oMsg) - { - var nMsgId=oMsg.nMessageId; - if(nMsgId==WH_MSG_GETPROJINFO) - { - if(gbReady) - { - var oProj=new Object(); - oProj.aProj=gaProj; - oProj.bXML=gbXML; - oMsg.oParam=oProj; - } - else - return false; - } - else if(nMsgId==WH_MSG_SHOWTOC) - { - if(goMan) - goMan.show("toc"); - var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "toc"); - SendMessage(onMsg); - onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null); - SendMessage(onMsg); - } - else if(nMsgId==WH_MSG_SHOWIDX) - { - if(goMan) - goMan.show("idx"); - var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "idx"); - SendMessage(onMsg); - onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null); - SendMessage(onMsg); - } - else if(nMsgId==WH_MSG_SHOWFTS) - { - if(goMan) - goMan.show("fts"); - var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "fts"); - SendMessage(onMsg); - onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null); - SendMessage(onMsg); - } - else if(nMsgId==WH_MSG_SHOWGLO) - { - if(goMan) - goMan.show("glo"); - var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "glo"); - SendMessage(onMsg); - onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null); - SendMessage(onMsg); - } - else if(nMsgId==WH_MSG_GETPANEINFO) - { - oMsg.oParam=goMan.getCurrent(); - return false; - } - } - return true; -} - -if(window.gbWhUtil&&window.gbWhMsg&&window.gbWhVer&&window.gbWhProxy) -{ - RegisterListener2(this,WH_MSG_GETPROJINFO); - RegisterListener2(this,WH_MSG_SHOWTOC); - RegisterListener2(this,WH_MSG_SHOWIDX); - RegisterListener2(this,WH_MSG_SHOWFTS); - RegisterListener2(this,WH_MSG_SHOWGLO); - RegisterListener2(this,WH_MSG_GETPANEINFO); - - if((gbMac&&gbIE4)||(gbSunOS&&gbIE5)||gbOpera7) - { - window.onresize=window_resize; - } - else if(gbIE4) - { - window.onresize=window_resize2; - } - window.onload=window_OnLoad; - window.onbeforeunload=window_MyBunload; - window.onunload=window_unload; - gbWhPHost=true; -} -else - document.location.reload(); - diff --git a/doc/salome/gui/SMESH/whproj.htm b/doc/salome/gui/SMESH/whproj.htm deleted file mode 100755 index 2549c9a7c..000000000 --- a/doc/salome/gui/SMESH/whproj.htm +++ /dev/null @@ -1,24 +0,0 @@ - - -project description - - - - - - - - - - - \ 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 index 7f607a446..000000000 --- a/doc/salome/gui/SMESH/whproj.js +++ /dev/null @@ -1,85 +0,0 @@ -// WebHelp 5.10.001 -var gaProj=new Array(); - -gaProj[0]=new project(""); - -function setLangId(sLangId) -{ - gaProj[0].sLangId=sLangId; -} - -function setDataPath(sPath) -{ - if(sPath.length!=0) - { - if(sPath.lastIndexOf("/")!=sPath.length-1) - sPath+="/"; - gaProj[0].sDPath=sPath; - } - else - gaProj[0].sDPath=""; -} - -function addToc(sFile) -{ - gaProj[0].sToc=sFile; -} - -function addIdx(sFile) -{ - gaProj[0].sIdx=sFile; -} - -function addFts(sFile) -{ - gaProj[0].sFts=sFile; -} - -function addGlo(sFile) -{ - gaProj[0].sGlo=sFile; -} - -function addRemoteProject(sProjRelPath) -{ - if(sProjRelPath.lastIndexOf("/")!=sProjRelPath.length-1) - sProjRelPath+="/"; - gaProj[gaProj.length]=new project(sProjRelPath); -} - -function project(sPPath) -{ - this.sPPath=sPPath; - this.sLangId=""; - this.sDPath=""; - this.sToc=""; - this.sIdx=""; - this.sFts=""; - this.sGlo=""; -} - -window.onload=window_OnLoad; - -function window_OnLoad() -{ - gsName=document.location.href; - gsName=_replaceSlash(gsName); - var nPos=gsName.lastIndexOf("/"); - if(nPos!=-1) - gaProj[0].sPPath=gsName.substring(0,nPos+1); - else - alert("Error in Loading navigation component. Please regenerate WebHelp."); - patchPath(gaProj); - if(parent&&parent!=this&& typeof(parent.putProjectInfo)=="function") - { - parent.putProjectInfo(gaProj); - } -} - -function patchPath(aProj) -{ - for(var i=1;i - - diff --git a/doc/salome/gui/SMESH/whproxy.js b/doc/salome/gui/SMESH/whproxy.js deleted file mode 100755 index 8ea8b6819..000000000 --- a/doc/salome/gui/SMESH/whproxy.js +++ /dev/null @@ -1,74 +0,0 @@ -// WebHelp 5.10.001 -var gbInited=false; -var gWndStubPage=null; -function getStubPage() -{ - if(!gbInited) - { - gWndStubPage=getStubPage_inter(window); - gbInited=true; - } - return gWndStubPage; -} - -function getStubPage_inter(wCurrent) -{ - if(null==wCurrent.parent||wCurrent.parent==wCurrent) - return null; - - if(typeof(wCurrent.parent.whname)=="string"&&"wh_stub"==wCurrent.parent.whname) - return wCurrent.parent; - else - if(wCurrent.parent.frames.length!=0&&wCurrent.parent!=wCurrent) - return getStubPage_inter(wCurrent.parent); - else - return null; -} - -function RegisterListener(framename,nMessageId) -{ - var wSP=getStubPage(); - if(wSP&&wSP!=this) - return wSP.RegisterListener(framename,nMessageId); - else - return false; -} - -function RegisterListener2(oframe,nMessageId) -{ - var wSP=getStubPage(); - if(wSP&&wSP!=this) - return wSP.RegisterListener2(oframe,nMessageId); - else - return false; -} - -function UnRegisterListener2(oframe,nMessageId) -{ - var wSP=getStubPage(); - if(wSP&&wSP!=this&&wSP.UnRegisterListener2) - return wSP.UnRegisterListener2(oframe,nMessageId); - else - return false; -} - -function SendMessage(oMessage) -{ - var wSP=getStubPage(); - if(wSP&&wSP!=this&&wSP.SendMessage) - return wSP.SendMessage(oMessage); - else - return false; -} - -var gbWhProxy=true; - -var gbPreview=false; -gbPreview=false; -if (gbPreview) - document.oncontextmenu=contextMenu; - -function contextMenu() -{ - return false; -} diff --git a/doc/salome/gui/SMESH/whres.xml b/doc/salome/gui/SMESH/whres.xml deleted file mode 100755 index 1d279bbc3..000000000 --- a/doc/salome/gui/SMESH/whres.xml +++ /dev/null @@ -1,256 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - </fonts> - <button normal="" hover="" /> - <editwith value="28" /> - </form> - <background color="" img="" /> - <fonts> - <normal name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" /> - <hover name="Arial" size="9pt" color="#007f00" style="normal" weight="normal" decoration="underline" /> - <empty name="Arial" size="9pt" color="#666666" style="normal" weight="normal" decoration="none" /> - </fonts> - <activebackgroundcolor attr="#cccccc" /> - <margin attr="0pt" /> - <indent attr="9pt" /> - </index> - <fts> - <form> - <fonts> - <title name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" /> - </fonts> - <button normal="" hover="" /> - <editwith value="28" /> - </form> - <background color="" img="" /> - <fonts> - <normal name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" /> - <hover name="Arial" size="9pt" color="#007f00" style="normal" weight="normal" decoration="underline" /> - <error name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" /> - </fonts> - <activebackgroundcolor attr="#cccccc" /> - <margin attr="0pt" /> - <indent attr="9pt" /> - </fts> - <glossary> - <background color="" img="" /> - <fonts> - <normal name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" /> - <hover name="Arial" size="9pt" color="#007f00" style="normal" weight="normal" decoration="underline" /> - </fonts> - <activebackgroundcolor attr="#cccccc" /> - <margin attr="0pt" /> - <indent attr="9pt" /> - </glossary> - </paneskin> -</resource> diff --git a/doc/salome/gui/SMESH/whskin_blank.htm b/doc/salome/gui/SMESH/whskin_blank.htm deleted file mode 100755 index a61ddecbe..000000000 --- a/doc/salome/gui/SMESH/whskin_blank.htm +++ /dev/null @@ -1,10 +0,0 @@ -<html> -<head> -<title>Blank Page - - - - - - - diff --git a/doc/salome/gui/SMESH/whskin_homepage.htm b/doc/salome/gui/SMESH/whskin_homepage.htm deleted file mode 100755 index 3163eee1b..000000000 --- a/doc/salome/gui/SMESH/whskin_homepage.htm +++ /dev/null @@ -1,180 +0,0 @@ - - -Mesh Module Reference Manual - - - - - - - - - - - - - diff --git a/doc/salome/gui/SMESH/whskin_info.htm b/doc/salome/gui/SMESH/whskin_info.htm deleted file mode 100755 index 0ad872aae..000000000 --- a/doc/salome/gui/SMESH/whskin_info.htm +++ /dev/null @@ -1,20 +0,0 @@ - - -WebHelp 5.50 - - - - -

    WebHelp 5.50 System Info

    - - - - - - - - - -
    Start Page index.htm
    Skin Name
    Generating Time 12:45 05/22/2006
    Language ID 1033
    Compile Script webhelp5_compile_script.xml
    Compile Build Version 13.10.606
    Product Name WebHelp 5.50
    Authoring Tool Name RoboHelp X5
    - - diff --git a/doc/salome/gui/SMESH/whskin_pickup.htm b/doc/salome/gui/SMESH/whskin_pickup.htm deleted file mode 100755 index c3469d79f..000000000 --- a/doc/salome/gui/SMESH/whskin_pickup.htm +++ /dev/null @@ -1,229 +0,0 @@ - - -Select a Topic                                                                                    - - - - - - -

    Select a topic, then click Display

    -
    -
    -
    - - - -
    - - - - diff --git a/doc/salome/gui/SMESH/whskin_tw.htm b/doc/salome/gui/SMESH/whskin_tw.htm deleted file mode 100755 index 01bee59ac..000000000 --- a/doc/salome/gui/SMESH/whskin_tw.htm +++ /dev/null @@ -1,63 +0,0 @@ - - - - \ 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 index 2fc6ef910..000000000 --- a/doc/salome/gui/SMESH/whstart.js +++ /dev/null @@ -1,432 +0,0 @@ -// WebHelp 5.10.003 -RegisterListener2(this, WH_MSG_GETSTARTFRAME); -RegisterListener2(this, WH_MSG_GETDEFAULTTOPIC); -RegisterListener2(this, WH_MSG_MINIBARORDER); -RegisterListener2(this, WH_MSG_TOOLBARORDER); -RegisterListener2(this, WH_MSG_ISSEARCHSUPPORT); -RegisterListener2(this, WH_MSG_ISSYNCSSUPPORT); -RegisterListener2(this, WH_MSG_ISAVENUESUPPORT); -RegisterListener2(this, WH_MSG_GETPANETYPE); -RegisterListener2(this, WH_MSG_GETPANES); -RegisterListener2(this, WH_MSG_RELOADNS6); -RegisterListener2(this, WH_MSG_GETCMD); -RegisterListener2(this, WH_MSG_GETPANE); -RegisterListener2(this, WH_MSG_GETDEFPANE); - -if (gbNav6) -{ - var gnReload=0; - setTimeout("delayReload();",5000); -} - -function delayReload() -{ - if (!(this.cMRServer && cMRServer.m_strVersion)) - { - if(gnReload!=2) - { - if(nViewFrameType&&nViewFrameType==1) - document.location=document.location; - } - } -} - -var gsToolbarOrder = ""; -var gsMinibarOrder = ""; - -var gsTopic = "mesh.htm"; -var PANE_OPT_SEARCH = 1; -var PANE_OPT_BROWSESEQ = 2; -var gnOpts=-1; -var gnCmd=-1; -var gnPans=2; -var gsBtns="invalid"; -var gsDefaultBtn="invalid"; -var gbHasTitle=false; - -if (location.hash.length > 1) -{ - var sParam = location.hash; - if (sParam.indexOf("#<") == 0) - { - document.location = "whcsh_home.htm#" + sParam.substring(2); - } - else if (sParam.indexOf("#>>") == 0) - { - parseParam(sParam.substring(3)); - sParam = "#" + gsTopic + sParam.substring(1); - } - else - { - var nPos = sParam.indexOf(">>"); - if (nPos>1) - { - gsTopic = sParam.substring(1, nPos); - parseParam(sParam.substring(nPos+2)); - } - else - gsTopic = sParam.substring(1); - } - if (gnPans == 1 && gsTopic) - { - var strURL=location.href; - if (location.hash) - { - var nPos=location.href.indexOf(location.hash); - strURL=strURL.substring(0, nPos); - } - if (gbHasTitle) - document.location=_getPath(strURL)+ "whskin_tw.htm" + sParam; - else - document.location=_getPath(strURL)+ gsTopic; - } -} - -function parseParam(sParam) -{ - if (sParam) - { - var nBPos=0; - do - { - var nPos=sParam.indexOf(">>", nBPos); - if (nPos!=-1) - { - if (nPos>0) - { - var sPart=sParam.substring(nBPos, nPos); - parsePart(sPart); - } - nBPos = nPos + 2; - } - else - { - var sPart=sParam.substring(nBPos); - parsePart(sPart); - break; - } - } while(nBPos < sParam.length); - } -} - -function parsePart(sPart) -{ - if(sPart.toLowerCase().indexOf("cmd=")==0) - { - gnCmd=parseInt(sPart.substring(4)); - } - else if(sPart.toLowerCase().indexOf("cap=")==0) - { - document.title=_browserStringToText(sPart.substring(4)); - gbHasTitle=true; - } - else if(sPart.toLowerCase().indexOf("pan=")==0) - { - gnPans=parseInt(sPart.substring(4)); - } - else if(sPart.toLowerCase().indexOf("pot=")==0) - { - gnOpts=parseInt(sPart.substring(4)); - } - else if(sPart.toLowerCase().indexOf("pbs=")==0) - { - var sRawBtns = sPart.substring(4); - var aBtns = sRawBtns.split("|"); - for (var i=0;i0) - { - frame=getframehandle(frames[i].frames,framename); - if(null!=frame) - return frame; - } - } - return frame; -} - -function AddToArray(arr,obj) -{ - var bFound=false; - for(var i=0;ii) - return gArrayCompoentsArray[i]; - else - return null; - } - } - return null; -} - -function CreateComponentsArray(nMessageId) -{ - var len=gArrayRegistedMessage.length; - gArrayRegistedMessage[len]=nMessageId; - gArrayCompoentsArray[len]=new Array(); - return gArrayCompoentsArray[len]; -} - -function listener(sName,oWindow) -{ - this.sName=sName; - this.oWindow=oWindow; -} - -function RegisterListener(windowName,nMessageId) -{ - var arrayComponents=GetComponentsArray(nMessageId); - if(arrayComponents==null) - arrayComponents=CreateComponentsArray(nMessageId); - - if(arrayComponents!=null) - { - for (var i=0;i0){ - for(var i=0;i - -Table of contents - - - - - - - - - - - - - - - - diff --git a/doc/salome/gui/SMESH/whthost.js b/doc/salome/gui/SMESH/whthost.js deleted file mode 100755 index 1a864bbcd..000000000 --- a/doc/salome/gui/SMESH/whthost.js +++ /dev/null @@ -1,1504 +0,0 @@ -// WebHelp 5.10.007 -var gaHSLoad=new Array(); -var gnMinIdx=0; -var gnInsIdx=-1; -var gsLoadingDivID="LoadingDiv"; -var gsLoadingMsg="Loading, click here to cancel..."; -var gaProj=null; -var gaTocs=new Array(); -var goChunk=null; -var gbReady=false; -var gbToc=false; -var gbXML=false; -var gaRoot=new Array(); -var gnCC=-1; -var gsTP=""; -var gaBTPs=""; -var gsCTPath=""; -var gnLT=-1; -var gsPathSplit="\n"; -var gsBgColor="#ffffff"; -var gsBgImage=""; -var goFont=null; -var goHFont=null; - -var gsMargin="0pt"; -var gsIndent="15pt"; -var gsABgColor="#cccccc"; - -var giBookClose=""; -var giBookOpen=""; -var giBookItem=""; -var giURLItem=""; -var giNewBookClose=""; -var giNewBookOpen=""; -var giNewBookItem=""; -var giNewURLItem=""; -var gnImages=0; -var gnLoadedImages=0; -var gaImgs=new Array(); -var gbLoadData=false; -var gobj=null; -var gaTocsNs61Fix=null; -var gbWhTHost=false; -var gBookItems=new Array(); -var gInSync=false; -var gbLData=false; -var gbNeedFillStub=false; -var gbLoadToc=false; - -function chunkInfoQueue() -{ - this.aContent=new Array(); - this.inQueue=function(cInfo) - { - this.aContent[this.aContent.length]=cInfo; - } - this.deQueue=function() - { - var cInfo=null; - if(this.aContent.length>0) - { - cInfo=this.aContent[0]; - for(var i=1;i0) - { - var nCIdx=0; - do { - nCIdx++; - var i=nIdx+nCIdx; - var nItemType=getItemType(i); - if(nItemType==1){ - if (!isBookEmpty(i)) - return false; - } - else if(nItemType==4){ - var sSrc=getRefURL(i); - var nProj=getProject(sSrc); - if(nProj!=-1){ - sSrc=gaRoot[nProj].sToc; - if(sSrc) - return false; - } - } - else if(nItemType==2||nItemType==16||nItemType==8) - return false; - } while(nCIdx

    \"Book\""; - sHTML+=" "+sName+"

    "; - var sURL=_textToHtml_nonbsp(getItemURL(nIdx)); - if(sURL!="") - addBookItem(getBookId(nIdx),_textToHtml_nonbsp(getTopicTarget(nIdx)),sURL); - sHTML+="
    "; - } - else - sHTML=""; - } - else - { - sHTML+="stub>
    "; - gbNeedFillStub=true; - setTimeout("fillStub("+nIdx+","+bLocalProject+");",100); - } - return sHTML; -} - -function checkFillStub() -{ - if(!gbLData) - { - if(gchunkRequestQueue.length()>0) - { - var cInfo=gchunkRequestQueue.deQueue(); - if(cInfo) - { - fillStub(cInfo.nIdx,cInfo.bLocal); - return; - } - } - } - if(gbNeedFillStub) - { - gbNeedFillStub=false; - setTimeout("syncInit()",1); - } -} - -function fillStub(nIdx,bLocalProject) -{ - if(!gbLData) - { - gbLData=true; - var sObj=getElement(getPBId(nIdx)); - if(sObj!=null) - { - tocExpandHelpSet(nIdx,bLocalProject); - gbNeedFillStub=false; - setTimeout("syncInit()",1); - } - else - setTimeout("fillStub("+nIdx+","+bLocalProject+");",100); - } - else - gchunkRequestQueue.inQueue(new chunkInfo(nIdx,bLocalProject)); -} - -function getBookId(nIdx){return "B_"+nIdx;} - -function getItemId(nIdx){return "I_"+nIdx;} - -function markBook(nIdx) -{ - var obj=getElement(getItemId(nIdx)); - if(obj==null) - obj=getElement(getBookId(nIdx)); - if(gbNav6) - { - gobj=obj; - setTimeout("delayMarkObj();",1); - } - else - markObj(obj); -} - -function delayMarkObj() -{ - if(gobj) - { - markObj(gobj); - gobj=null; - } -} - -function markObj(obj) -{ - if(obj!=null) - { - HighLightElement(obj,gsABgColor,"transparent"); - var sPath=calTocPath(obj); - if(gsCTPath!=sPath) - gsCTPath=sPath; - } -} - -function markItem(nIdx) -{ - var obj=getElement(getItemId(nIdx)); - if(gbNav6) - { - gobj=obj; - setTimeout("delayMarkObj();",1); - } - else - markObj(getElement(getItemId(nIdx))); -} - -function calTocPath(obj) -{ - var sPath=getInnerText2(obj); - var pObj=getParentNode(obj); - do - { - while(pObj!=null&&!isCBId(pObj.id)) pObj=getParentNode(pObj); - if(pObj!=null) - { - var nId=getIdByCBId(pObj.id); - var sObj=getElement(getPBId(nId)); - if(sObj!=null) - { - var objs=getItemsByBook(sObj); - for(var i=0;i\""+sAltString+"\" "+sName+"

    "; - return sHTML; -} - -function writeBookItems(nIdx,num) -{ - var sHTML=""; - if(num>0){ - var nCIdx=0; - do{ - nCIdx++; - var i=nIdx+nCIdx; - var nItemType=getItemType(i); - if(nItemType==1||nItemType==4||nItemType==8){ - sHTML+=writeBook(i); - nCIdx+=getItemContentsNum(i); - } - else if(nItemType==2||nItemType==16){ - sHTML+=writeAnItem(i); - } - } - while(nCIdx"+gsLoadingMsg+"
    "; -} - -function getItemName(nIdx) -{ - var oChunk=getChunk(nIdx); - if(oChunk) - return oChunk.aTocs[nIdx-oChunk.nMI].sItemName; - else - return null; -} - -function getItemContentsNum(nIdx) -{ - var oChunk=getChunk(nIdx); - if(oChunk) - return oChunk.aTocs[nIdx-oChunk.nMI].nContents; - else - return null; -} - -function getItemType(nIdx) -{ - var oChunk=getChunk(nIdx); - if(oChunk) - return oChunk.aTocs[nIdx-oChunk.nMI].nType; - else - return 0; -} - -function getItemURL(nIdx) -{ - var oChunk=getChunk(nIdx); - if(oChunk) - { - var sPath=oChunk.aTocs[nIdx-oChunk.nMI].sItemURL; - if(!(sPath==null||sPath=="")) - { - return _getFullPath(oChunk.sPPath,sPath); - } - } - return ""; -} - -function getRefURL(nIdx) -{ - var oChunk=getChunk(nIdx); - if(oChunk) - { - var sPath=oChunk.aTocs[nIdx-oChunk.nMI].sRefURL; - if(!(sPath==null||sPath=="")) - { - return _getFullPath(oChunk.sPPath,sPath) - } - } - return ""; -} - -function getTopicTarget(nIdx) -{ - var oChunk=getChunk(nIdx); - if(oChunk) - { - if(typeof(oChunk.aTocs[nIdx-oChunk.nMI].sTarget)!="undefined") - return oChunk.aTocs[nIdx-oChunk.nMI].sTarget; - } - return ""; -} - -function getItemIcon(nIdx,nIconIdx) -{ - var oChunk=getChunk(nIdx); - if(oChunk) - { - if(typeof(oChunk.aTocs[nIdx-oChunk.nMI].sIconRef)!="undefined") - { - var sIconRef=oChunk.aTocs[nIdx-oChunk.nMI].sIconRef; - var nIndex=sIconRef.indexOf(";"); - while(nIconIdx-->0&&nIndex!=-1) - { - sIconRef=sIconRef.substring(nIndex+1); - nIndex=sIconRef.indexOf(";"); - } - if(nIconIdx<0) - { - if(nIndex!=-1) - sIconRef=sIconRef.substring(0,nIndex); - return _getFullPath(oChunk.sPPath,sIconRef) - } - } - } - return ""; -} - -function TocWriteClassStyle() -{ - var sStyle=""; - document.write(sStyle); -} - -function TocWriteFixedWidth(bBegin,nWidth) -{ - if((gbIE4)&&(gbMac)&&(!gbIE5)){ - if(bBegin) - document.write("
    "); - else - document.write("
    "); - } -} - -function TocInitPage() -{ - var tempColl=getItemsByBook(document.body); - if(tempColl.length>0) - tempColl[0].focus(); -} - -function getItemsFromObj(obj) -{ - var aAnchor=new Array(); - var tempColl=getChildrenByTag(obj,"P"); - if(tempColl&&tempColl.length>0) - { - var anobr=new Array(); - for(var i=0;i0) - for(var j=0;j0) - for(var u=0;u0) - for(var j=0;jdocument.body.clientHeight){ - nNewScroll=nTop-20; - } - } - document.body.scrollTop=nNewScroll; -} - -function TocExpand(nId,bChangeImg,bForceOpen) -{ - var oDiv=getElement(getCBId(nId)); - if(oDiv==null) return null; - - var whichIm=document.images[getBId(nId)]; - if((oDiv.style.display!="block")||bForceOpen){ - oDiv.style.display="block"; - if(bChangeImg){ - var sPath=getPath(whichIm.src); - sPath=_getFullPath(sPath,getBookImage(nId,false)); - whichIm.src=sPath; - } - }else{ - oDiv.style.display="none"; - if(bChangeImg){ - var sPath=getPath(whichIm.src); - sPath=_getFullPath(sPath,getBookImage(nId,true)); - whichIm.src=sPath; - } - if(gbMac&&gbIE5){ - this.parent.document.getElementById("tocIFrame").style.width="101%"; - this.parent.document.getElementById("tocIFrame").style.width="100%"; - } - } - return oDiv; -} - -function getChunkId(n) -{ - var nCan=-1; - for(var i=0;i=gaTocs[nCan].nMI) - nCan=i; - } - if(nCan!=-1) - return nCan; - else - return -1; -} - -function getChunk(n) -{ - if(gnCC!=-1&&gaTocs[gnCC].nMI<=n&&(gnCC==gaTocs.length-1|| - gaTocs[gnCC+1].nMI>n)) - { - return gaTocs[gnCC]; - } - else{ - gnCC=getChunkId(n); - if(gnCC!=-1) - return gaTocs[gnCC]; - else - return null; - } -} - -function getBookImage(nIdx,bClosed) -{ - var nIdx=bClosed?0:1; - var sIcon=getItemIcon(nIdx,nIdx); - if(sIcon=="") - if(bClosed) - sIcon=giBookClose; - else - sIcon=giBookOpen; - return _getFullPath(gaProj[0].sPPath,sIcon); -} - -function getItemImage(nIdx,bRemote) -{ - var sIcon=getItemIcon(nIdx,0); - if(sIcon=="") - if(bRemote) - sIcon=giURLItem; - else - sIcon=giBookItem; - return _getFullPath(gaProj[0].sPPath,sIcon); -} - -function getInnerText2(obj) -{ - var sText=getInnerText(obj); - if(sText.length>0&&!gbOpera7) - sText=sText.substring(1); - return sText; -} - -function expandToc(oObj,sRest,aIdList) -{ - var len=aIdList.length; - var nPos=sRest.indexOf(gsPathSplit); - if(nPos!=-1) - { - sPart=sRest.substring(0,nPos); - sRest=sRest.substring(nPos+1); - } - else - { - sPart=sRest; - var aTagAs=getItemsByBook(oObj); - for(var s=0;s0) - { - if(gbNav6) - { - var sCommand=obj[0].getAttribute("onClick"); - var nCommand=sCommand.indexOf(";"); - sCommand=sCommand.substring(0,nCommand); - setTimeout(sCommand,1); - } - else - obj[0].click(); - } - return -1; - } - var nRet=expandToc(oCObj,sRest,aIdList); - if(nRet) - return nRet; - } - } - aIdList.length=len; - return 0; -} - -function getIdByPBId(sPId) -{ - return parseInt(sPId.substring(2,sPId.length-1)); -} - -function getIdByCBId(sCId) -{ - return parseInt(sCId.substring(2,sCId.length-1)); -} - -function isPBId(sId) -{ - return (sId&&sId.indexOf("B_")==0&&sId.lastIndexOf("P")==sId.length-1); -} - -function isCBId(sId) -{ - return (sId&&sId.indexOf("B_")==0&&sId.lastIndexOf("C")==sId.length-1); -} - -function getBId(nIdx) -{ - return "B_"+nIdx; -} - -function getPBId(nIdx) -{ - return getBId(nIdx)+"P"; -} - -function getCBId(nIdx) -{ - return getBId(nIdx)+"C"; -} - -function getClosestTocPath(aPaths) -{ - var nMaxSimilarity=0; - var nThatIndex=-1; - var sPath=null; - if(aPaths.length==0) return sPath; - for(var i=0;inMaxSimilarity) - { - nMaxSimilarity=nSimilarity; - nThatIndex=i; - } - } - if(nThatIndex!=-1) - sPath=aPaths[nThatIndex]; - else - sPath=aPaths[0]; - return sPath; -} - -function comparePath(sPath1,sPath2) -{ - var nMaxSimilarity=0; - var nStartPos1=0; - var nPos1=-1; - var nStartPos2=0; - var nPos2=-1; - do{ - var sCheck1=null; - var sCheck2=null; - nPos1=sPath1.indexOf(gsPathSplit,nStartPos1); - if(nPos1!=-1) - { - sCheck1=sPath1.substring(nStartPos1,nPos1); - nStartPos1=nPos1+1; - } - else - { - sCheck1=sPath1.substring(nStartPos1); - nStartPos1=-1; - } - nPos2=sPath2.indexOf(gsPathSplit,nStartPos2); - if(nPos1!=-1) - { - sCheck2=sPath2.substring(nStartPos2,nPos2); - nStartPos2=nPos2+1; - } - else - { - sCheck2=sPath2.substring(nStartPos2); - nStartPos2=-1; - } - if(sCheck1==sCheck2) - nMaxSimilarity++; - else - break; - }while(nStartPos1!=-1&&nStartPos2!=-1); - return nMaxSimilarity; -} - -function getTocPaths(oTopicParam) -{ - var aRelTocPaths=oTopicParam.aPaths; - var aPaths=new Array(); - for(var i=0;i0) - { - for(var i=0;i0) - { - document.body.background=gsBgImage; - } - if(gsBgColor&&gsBgColor.length>0) - { - document.body.bgColor=gsBgColor; - } - loadToc(); - var oMsg=new whMessage(WH_MSG_SHOWTOC,this,1,null) - SendMessage(oMsg); -} - -function loadImages() -{ - if(giBookClose) - { - gaImgs[gnImages]=giBookClose; - gnImages++; - } - if(giBookOpen) - { - gaImgs[gnImages]=giBookOpen; - gnImages++; - } - if(giBookItem) - { - gaImgs[gnImages]=giBookItem; - gnImages++; - } - if(giURLItem) - { - gaImgs[gnImages]=giURLItem; - gnImages++; - } - if(giNewBookClose) - { - gaImgs[gnImages]=giNewBookClose; - gnImages++; - } - if(giNewBookOpen) - { - gaImgs[gnImages]=giNewBookOpen; - gnImages++; - } - if(giNewBookItem) - { - gaImgs[gnImages]=giNewBookItem; - gnImages++; - } - if(giNewURLItem) - { - gaImgs[gnImages]=giNewURLItem; - gnImages++; - } - if(gnImages>0) - { - setTimeout("loadDataAfter();",1000); - loadImage(gaImgs[0]); - } - else - loadDataAfter(); -} - -function loadImage(sURL) -{ - var oImg=new Image(); - oImg.onload=checkImageLoading; - oImg.onerror=errorImageLoading; - oImg.src=_getFullPath(gaProj[0].sPPath,sURL); -} - -function loadDataAfter() -{ - if(!gbLoadData) - { - gbLoadData=true; - loadTData(); - } -} - -function errorImageLoading() -{ - gnLoadedImages++; - if(gnImages==gnLoadedImages) - loadDataAfter(); - else - loadImage(gaImgs[gnLoadedImages]); -} - -function checkImageLoading() -{ - gnLoadedImages++; - if(gnImages==gnLoadedImages) - loadDataAfter(); - else - loadImage(gaImgs[gnLoadedImages]); -} - -function window_unload() -{ - UnRegisterListener2(this,WH_MSG_PROJECTREADY); - UnRegisterListener2(this,WH_MSG_SYNCTOC); - UnRegisterListener2(this,WH_MSG_SHOWTOC); -} - -function onSendMessage(oMsg) -{ - if(oMsg) - { - var nMsgId=oMsg.nMessageId; - if(nMsgId==WH_MSG_PROJECTREADY) - { - loadToc(); - } - else if(nMsgId==WH_MSG_SYNCTOC) - { - if(gbReady) - { - syncWithPaths(oMsg.oParam); - } - } - else if(nMsgId==WH_MSG_SHOWTOC) - { - if(!gbNav6) - document.body.focus(); - } - } - return true; -} - -if(window.gbWhUtil&&window.gbWhVer&&window.gbWhMsg&&window.gbWhProxy) -{ - RegisterListener2(this,WH_MSG_PROJECTREADY); - RegisterListener2(this,WH_MSG_SYNCTOC); - RegisterListener2(this,WH_MSG_SHOWTOC); - goFont=new whFont("Verdana","8pt","#000000","normal","normal","none"); - goHFont=new whFont("Verdana","8pt","#007f00","normal","normal","underline"); - - window.onload=window_OnLoad; - window.onbeforeunload=window_BUnload; - window.onunload=window_unload; - gbWhTHost=true; -} -else - 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 index 52198a574..000000000 --- a/doc/salome/gui/SMESH/whtopic.js +++ /dev/null @@ -1,725 +0,0 @@ -// WebHelp 5.10.005 -var gsPPath=""; -var gaPaths=new Array(); -var gaAvenues=new Array(); - -var goFrame=null; -var gsStartPage=""; -var gsRelCurPagePath=""; -var gsSearchFormHref=""; -var gnTopicOnly=-1; -var gnOutmostTopic=-1; - -var BTN_TEXT=1; -var BTN_IMG=2; - -var goSync=null; - -var goShow=null; -var goHide=null; - -var goPrev=null; -var goNext=null; -var gnForm=0; -var goShowNav=null; -var goHideNav=null; - -var goWebSearch=null; - -var gsBtnStyle=""; -var gaButtons=new Array(); -var gaTypes=new Array(); -var whtopic_foldUnload=null; -var gbWhTopic=false; -var gbCheckSync=false; -var gbSyncEnabled=false; - -function setButtonFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration) -{ - var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration); - gsBtnStyle+=".whtbtn"+sType+"{"+getFontStyle(vFont)+"}"; -} - -function writeBtnStyle() -{ - if(gaButtons.length>0) - { - if(gsBtnStyle.length>0) - { - var sStyle=""; - document.write(sStyle); - } - } -} - -function button(sText,nWidth,nHeight) -{ - this.sText=sText; - this.nWidth=nWidth; - this.nHeight=nHeight; - - this.aImgs=new Array(); - var i=0; - while(button.arguments.length>i+3) - { - this.aImgs[i]=button.arguments[3+i]; - i++; - } -} - -//project info -function setRelStartPage(sPath) -{ - if(gsPPath.length==0) - { - gsPPath=_getFullPath(_getPath(document.location.href),_getPath(sPath)); - gsStartPage=_getFullPath(_getPath(document.location.href),sPath); - gsRelCurPagePath=_getRelativeFileName(gsStartPage,document.location.href); - } -} - -function getImage(oImage,sType) -{ - var sImg=""; - if(oImage&&oImage.aImgs&&(oImage.aImgs.length>0)) - { - sImg+="\""+sType+"\"0) - sImg+=" width="+oImage.nWidth; - if(oImage.nHeight>0) - sImg+=" height="+oImage.nHeight; - sImg+=" border=0>"; - } - return sImg; -} - -function addTocInfo(sTocPath) -{ - gaPaths[gaPaths.length]=sTocPath; -} - -function addAvenueInfo(sName,sPrev,sNext) -{ - gaAvenues[gaAvenues.length]=new avenueInfo(sName,sPrev,sNext); -} - -function addButton(sType,nStyle,sText,sHref,sOnClick,sOnMouseOver,sOnLoad,nWidth,nHeight,sImg1,sImg2,sImg3) -{ - var sButton=""; - var nBtn=gaButtons.length; - if(sType=="prev") - { - if(canGo(false)) - { - var sTitle="Previous Topic"; - goPrev=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); - sButton=""; - if(nStyle==BTN_TEXT) - sButton+=goPrev.sText; - else - sButton+=getImage(goPrev,sTitle); - sButton+=""; - } - } - else if(sType=="next") - { - if(canGo(true)) - { - var sTitle="Next Topic"; - goNext=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); - sButton=""; - if(nStyle==BTN_TEXT) - sButton+=goNext.sText; - else - sButton+=getImage(goNext,sTitle); - sButton+=""; - } - } - else if(sType=="show") - { - if(isTopicOnly()&&(!gbOpera6||gbOpera7)) - { - var sTitle="Show Navigation Component"; - goShow=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); - sButton=""; - if(nStyle==BTN_TEXT) - sButton+=goShow.sText; - else - sButton+=getImage(goShow,sTitle); - sButton+=""; - } - } - else if(sType=="hide") - { - if(!isTopicOnly()&&!gbOpera6) - { - var sTitle="Hide Navigation Component"; - goHide=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); - sButton=""; - if(nStyle==BTN_TEXT) - sButton+=goHide.sText; - else - sButton+=getImage(goHide,sTitle); - sButton+=""; - } - } - else if(sType=="shownav") - { - if(isShowHideEnable()) - { - var sTitle="Show Navigation Component"; - goShowNav=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); - sButton=""; - if(nStyle==BTN_TEXT) - sButton+=goShowNav.sText; - else - sButton+=getImage(goShowNav,sTitle); - sButton+=""; - } - } - else if(sType=="hidenav") - { - if(isShowHideEnable()) - { - var sTitle="Hide Navigation Component"; - goHideNav=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); - sButton=""; - if(nStyle==BTN_TEXT) - sButton+=goHideNav.sText; - else - sButton+=getImage(goHideNav,sTitle); - sButton+=""; - } - } - else if(sType=="synctoc") - { - if(gaPaths.length>0) - { - var sTitle="Sync TOC"; - goSync=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); - sButton=""; - if(nStyle==BTN_TEXT) - sButton+=goSync.sText; - else - sButton+=getImage(goSync,sTitle); - sButton+=""; - } - } - else if(sType=="websearch") - { - if(gsSearchFormHref.length>0) - { - var sTitle="WebSearch"; - goWebSearch=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); - sButton=""; - if(nStyle==BTN_TEXT) - sButton+=goWebSearch.sText; - else - sButton+=getImage(goWebSearch,sTitle); - sButton+=""; - } - } - else if(sType=="searchform") - { - gaButtons[nBtn]="NeedSearchForm"; - gaTypes[nBtn]=sType; - } - if(sButton.length!=0) - { - if(nStyle==BTN_TEXT) - sButton+=" "; - gaButtons[nBtn]=""+sButton+""; - gaTypes[nBtn]=sType; - } -} - -function isSyncEnabled() -{ - if(!gbCheckSync) - { - var oMsg=new whMessage(WH_MSG_ISSYNCSSUPPORT,this,1,null); - if(SendMessage(oMsg)) - { - gbSyncEnabled=oMsg.oParam; - } - gbCheckSync=true; - } - return gbSyncEnabled; -} - -function isInPopup() -{ - return (window.name.indexOf("BSSCPopup")!=-1); -} - -function getIntopicBar(sAlign) -{ - var sHTML=""; - if(gaButtons.length>0) - { - sHTML+="
    "; - - sHTML+=""; - for(var i=0;i0) - { - var sHTML=""; - if(nAligns!=0) - { - sHTML+="
    " - if(nAligns&1) - sHTML+=""; - if(nAligns&2) - sHTML+=""; - if(nAligns&4) - sHTML+=""; - sHTML+="
    "+getIntopicBar("left")+""+getIntopicBar("center")+""+getIntopicBar("right")+"
    "; - document.write(sHTML); - } - } -} - -function sendAveInfoOut() -{ - if(!isInPopup()) - setTimeout("sendAveInfo();",100); -} - -function sendAveInfo() -{ - var oMsg=new whMessage(WH_MSG_AVENUEINFO,this,1,gaAvenues); - SendMessage(oMsg); -} - - -function onNext() -{ - var oMsg=new whMessage(WH_MSG_NEXT,this,1,null); - SendMessage(oMsg); -} - -function onPrev() -{ - var oMsg=new whMessage(WH_MSG_PREV,this,1,null); - SendMessage(oMsg); -} - -function createSyncInfo() -{ - var oParam=new Object(); - if(gsPPath.length==0) - gsPPath=_getPath(document.location.href); - oParam.sPPath=gsPPath; - oParam.sTPath=document.location.href; - oParam.aPaths=gaPaths; - return oParam; -} - -function syncWithShow() -{ - if(isTopicOnly()) - show(); - else - { - sync(); - showTocPane(); - } -} - -function showTocPane() -{ - var oMsg=new whMessage(WH_MSG_SHOWTOC,this,1,null); - SendMessage(oMsg); -} - -function sendSyncInfo() -{ - if(!isInPopup()) - { - var oParam=null; - if(gaPaths.length>0) - { - oParam=createSyncInfo(); - } - var oMsg=new whMessage(WH_MSG_SYNCINFO,this,1,oParam); - SendMessage(oMsg); - } -} - -function sendInvalidSyncInfo() -{ - if(!isInPopup()) - { - var oMsg=new whMessage(WH_MSG_SYNCINFO,this,1,null); - SendMessage(oMsg); - } -} - -function enableWebSearch(bEnable) -{ - if(!isInPopup()) - { - var oMsg=new whMessage(WH_MSG_ENABLEWEBSEARCH,this,1,bEnable); - SendMessage(oMsg); - } -} - -function autoSync(nSync) -{ - if(nSync==0) return; - if(isInPopup()) return; - if(isOutMostTopic()) - sync(); -} - -function isOutMostTopic() -{ - if(gnOutmostTopic==-1) - { - var oMessage=new whMessage(WH_MSG_ISINFRAMESET,this,1,null); - if(SendMessage(oMessage)) - gnOutmostTopic=0; - else - gnOutmostTopic=1; - } - return (gnOutmostTopic==1); -} - -function sync() -{ - if(gaPaths.length>0) - { - var oParam=createSyncInfo(); - var oMessage=new whMessage(WH_MSG_SYNCTOC,this,1,oParam); - SendMessage(oMessage); - } -} - - -function avenueInfo(sName,sPrev,sNext) -{ - this.sName=sName; - this.sPrev=sPrev; - this.sNext=sNext; -} - -function getCurrentAvenue() -{ - var oParam=new Object(); - oParam.sAvenue=null; - var oMessage=new whMessage(WH_MSG_GETCURRENTAVENUE,this,1,oParam); - SendMessage(oMessage); - return oParam.sAvenue; -} - -function unRegisterListener() -{ - sendInvalidSyncInfo(); - enableWebSearch(false); - if(whtopic_foldUnload) - whtopic_foldUnload(); -} - -function onSendMessage(oMsg) -{ - var nMsgId=oMsg.nMessageId; - if(nMsgId==WH_MSG_GETAVIAVENUES) - { - oMsg.oParam.aAvenues=gaAvenues; - return false; - } - else if(nMsgId==WH_MSG_GETTOCPATHS) - { - if(isOutMostTopic()) - { - oMsg.oParam.oTocInfo=createSyncInfo(); - return false; - } - else - return true; - } - else if(nMsgId==WH_MSG_NEXT) - { - goAvenue(true); - } - else if(nMsgId==WH_MSG_PREV) - { - goAvenue(false); - } - else if(nMsgId==WH_MSG_WEBSEARCH) - { - websearch(); - } - return true; -} - -function goAvenue(bNext) -{ - var sTopic=null; - var sAvenue=getCurrentAvenue(); - var nAvenue=-1; - if(sAvenue!=null&&sAvenue!="") - { - for(var i=0;i0&&bNext) - { - sTopic=gaAvenues[i].sNext; - break; - } - else if(gaAvenues[i].sPrev!=null&&gaAvenues[i].sPrev.length>0&&!bNext) - { - sTopic=gaAvenues[i].sPrev; - break; - } - } - } - - if(sTopic!=null&&sTopic!="") - { - if(gsPPath!=null&&gsPPath!="") - { - sFullTopicPath=_getFullPath(gsPPath,sTopic); - document.location=sFullTopicPath; - } - } -} - -function canGo(bNext) -{ - for(var i=0;i0&&bNext)|| - (gaAvenues[i].sPrev!=null&&gaAvenues[i].sPrev.length>0&&!bNext)) - return true; - } - return false; -} - -function show() -{ - if(gsStartPage!="") - window.location=gsStartPage+"#"+gsRelCurPagePath; -} - -function hide() -{ - if(goFrame!=null) - { - goFrame.location=window.location; - } -} - -function isTopicOnly() -{ - if(gnTopicOnly==-1) - { - var oParam=new Object(); - oParam.oFrame=null; - var oMsg=new whMessage(WH_MSG_GETSTARTFRAME,this,1,oParam); - if(SendMessage(oMsg)) - { - goFrame=oParam.oFrame; - gnTopicOnly=0; - } - else - gnTopicOnly=1; - } - if(gnTopicOnly==1) - return true; - else - return false; -} - -function websearch() -{ - if(gbNav4) - { - if(document.ehelpform) - document.ehelpform.submit(); - } - else - { - if(window.ehelpform) - window.ehelpform.submit(); - } -} - -function addSearchFormHref(sHref) -{ - gsSearchFormHref=sHref; - enableWebSearch(true); -} - -function searchB(nForm) -{ - var sValue=eval("document.searchForm"+nForm+".searchString.value"); - var oMsg=new whMessage(WH_MSG_SEARCHTHIS,this,1,sValue); - SendMessage(oMsg); -} - -function getSearchFormHTML() -{ - var sHTML=""; - gnForm++; - var sFormName="searchForm"+gnForm; - var sButton="" - sButton+=""; - if(""=="text") - { - sButton+=""; - } - else if(""=="image") - { - sButton+="" - sButton+=""; - } - sButton+=""; - sHTML=""+sButton+""; - return sHTML; -} - -function showHidePane(bShow) -{ - var oMsg=null; - if(bShow) - oMsg=new whMessage(WH_MSG_SHOWPANE,this,1,null); - else - oMsg=new whMessage(WH_MSG_HIDEPANE,this,1,null); - SendMessage(oMsg); -} - -function isShowHideEnable() -{ - if(gbIE4) - return true; - else - return false; -} - - -function PickupDialog_Invoke() -{ - if(!gbIE4||gbMac) - { - if(typeof(_PopupMenu_Invoke)=="function") - return _PopupMenu_Invoke(PickupDialog_Invoke.arguments); - } - else - { - if(PickupDialog_Invoke.arguments.length>2) - { - var sPickup="whskin_pickup.htm"; - var sPickupPath=gsPPath+sPickup; - if(gbIE4) - { - var sFrame=PickupDialog_Invoke.arguments[1]; - var aTopics=new Array(); - for(var i=2;i1) - { - var nWidth=300; - var nHeight=180; - var nScreenWidth=screen.width; - var nScreenHeight=screen.height; - var nLeft=(nScreenWidth-nWidth)/2; - var nTop=(nScreenHeight-nHeight)/2; - if(gbIE4) - { - var vRet=window.showModalDialog(sPickupPath,aTopics,"dialogHeight:"+nHeight+"px;dialogWidth:"+nWidth+"px;resizable:yes;status:no;scroll:no;help:no;center:yes;"); - if(vRet) - { - var sURL=vRet.m_url; - if(sFrame) - window.open(sURL,sFrame); - else - window.open(sURL,"_self"); - } - } - } - else if(aTopics.length==1) - { - var sURL=aTopics[0].m_sURL - if(sFrame) - window.open(sURL,sFrame); - else - window.open(sURL,"_self"); - } - } - } - } -} - -if(window.gbWhUtil&&window.gbWhMsg&&window.gbWhVer&&window.gbWhProxy) -{ - RegisterListener("bsscright",WH_MSG_GETAVIAVENUES); - RegisterListener("bsscright",WH_MSG_GETTOCPATHS); - RegisterListener("bsscright",WH_MSG_NEXT); - RegisterListener("bsscright",WH_MSG_PREV); - RegisterListener("bsscright",WH_MSG_WEBSEARCH); - if(gbMac&&gbIE4) - { - if(typeof(window.onunload)!="unknown") - if(window.onunload.toString!=unRegisterListener.toString) - whtopic_foldUnload=window.onunload; - } - else - { - if(window.onunload) - if(window.onunload.toString!=unRegisterListener.toString) - whtopic_foldUnload=window.onunload; - } - window.onunload=unRegisterListener; - setButtonFont("show","","","","","",""); -setButtonFont("hide","","","","","",""); - - gbWhTopic=true; -} -else - document.location.reload(); diff --git a/doc/salome/gui/SMESH/whutils.js b/doc/salome/gui/SMESH/whutils.js deleted file mode 100755 index 5026b24a3..000000000 --- a/doc/salome/gui/SMESH/whutils.js +++ /dev/null @@ -1,527 +0,0 @@ -// WebHelp 5.10.004 -var gsFileName=""; -var gsDivName=""; -var xmlDoc=null; -var sdocPath=null; -var gsInsertBeforeEndHTML=""; -var sReplaceStringsSrc=new Array(); -var gsDivName="dataDiv"; -var gnLoadDivNum=0; -sReplaceStringsSrc[0]="&"; -sReplaceStringsSrc[1]=">"; -sReplaceStringsSrc[2]="<"; -sReplaceStringsSrc[3]="""; -sReplaceStringsSrc[4]=String.fromCharCode(8364); -sReplaceStringsSrc[5]=" "; - -var sReplaceStringsDst=new Array(); -sReplaceStringsDst[0]="&"; -sReplaceStringsDst[1]=">"; -sReplaceStringsDst[2]="<"; -sReplaceStringsDst[3]="\""; -sReplaceStringsDst[4]=String.fromCharCode(128); -sReplaceStringsDst[5]=" "; -var goHighLighted=null; - -function _getRelativePath(strParentPath,strCurrentPath) -{ - if(_isAbsPath(strCurrentPath)) return _getPath(strCurrentPath); - strParentPath=_replaceSlash(strParentPath); - strParentPath=_getPath(strParentPath); - strCurrentPath=_replaceSlash(strCurrentPath); - strCurrentPath=_getPath(strCurrentPath); - for(var i=0;i0) - { - var nPosx=sPath.indexOf("/",nPos+2); - if(nPosx>0) - return sPath.substring(0,nPosx); - else - return sPath; - } - return sPath; -} - -function _getFullPath(sPath,sRelPath) -{ - if(_isAbsPath(sRelPath)) - return sRelPath; - else if(_isAbsPathToHost(sRelPath)) - return _getHost(sPath)+sRelPath; - else - { - var sFullPath=sPath; - var nPathPos=0; - while(nPathPos!=-1) - { - var nPathPos=sRelPath.indexOf("../"); - if(nPathPos!=-1) - { - sRelPath=sRelPath.substring(nPathPos+3); - sFullPath=sFullPath.substring(0,sFullPath.length-1); - var nPos2=sFullPath.lastIndexOf("/"); - if(nPos2!=-1) - sFullPath=sFullPath.substring(0,nPos2+1); - else - break; - } - } - sFullPath+=sRelPath; - return sFullPath; - } -} - -function _isAbsPath(strPath) -{ - var strUpper=strPath.toUpperCase(); - return (strUpper.indexOf(":")!=-1||strUpper.indexOf("\\\\")==0); -} - -function _replaceSlash(strURL) -{ - var re=new RegExp("\\\\","g"); - var strReplacedURL=strURL.replace(re,"/"); - return strReplacedURL; -} - -function _getPath(strURL) -{ - pathpos=strURL.lastIndexOf("/"); - if(pathpos>0) - return strURL.substring(0,pathpos+1); - else - return ""; -} - -function removeItemFromArray(oArray,i) -{ - if(oArray.length&&i>=0&&i=0&&i<=oArray.length) - { - var len=oArray.length; - for(var s=len;s>i;s--) - oArray[s]=oArray[s-1]; - oArray[i]=obj; - } -} - -function loadData(sFileName) -{ - var i=gnLoadDivNum; - var sName=gsDivName+gnLoadDivNum++; - loadData_2(sFileName,sName); -} - -function loadData_2(sFileName,sDivName) -{ - if(!getElement(sDivName)) - { - if(!insertDataDiv(sDivName)) - { - gsFileName=sFileName; - gsDivName=sDivName; - return; - } - } - var sHTML=""; - if(gbMac) - sHTML+=""; - else - sHTML+=""; - - var oDivCon=getElement(sDivName); - if(oDivCon) - { - if(gbNav6) - { - if(oDivCon.getElementsByTagName&&oDivCon.getElementsByTagName("iFrame").length>0) - { - oDivCon.getElementsByTagName("iFrame")[0].src=sFileName; - } - else - oDivCon.innerHTML=sHTML; - } - else - oDivCon.innerHTML=sHTML; - } -} - -function loadDataXML(sFileName) -{ - var sCurrentDocPath=_getPath(document.location.href); - sdocPath=_getFullPath(sCurrentDocPath,sFileName); - if(gbIE5) - { - xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async=true; - xmlDoc.onreadystatechange=checkState; - if(document.body!=null) - xmlDoc.load(sdocPath); - } - else if(gbNav6) - { - xmlDoc=document.implementation.createDocument("","",null); - xmlDoc.addEventListener("load",initializeData,false); - xmlDoc.load(sdocPath,"text/xml"); - } -} - -function initializeData() -{ - if(xmlDoc!=null) - putDataXML(xmlDoc,sdocPath); -} - -function checkState() -{ - if(xmlDoc!=null) - { - var state=xmlDoc.readyState; - if(state==4) - { - var err=xmlDoc.parseError; - if(err.errorCode==0) - putDataXML(xmlDoc,sdocPath); - else - onLoadXMLError(); - } - } -} - -function insertDataDiv(sName) -{ - var sHTML=""; - if(gbMac) - sHTML+="
    "; - else - sHTML+="
    "; - if((gbIE5||gbNav6)&&document.body) - document.body.insertAdjacentHTML("beforeEnd",sHTML); - else - { - gsInsertBeforeEndHTML=sHTML; - setTimeout("insertWhenBodyReady();",100); - return false; - } - return true; -} - -function insertWhenBodyReady() -{ - if(gsInsertBeforeEndHTML=="") return; - if(document.body) - { - document.body.insertAdjacentHTML("beforeEnd",gsInsertBeforeEndHTML); - gsInsertBeforeEndHTML=""; - loadData_2(gsFileName,gsDivName); - } - else - { - setTimeout("insertWhenBodyReady();",100); - } -} - -function window_BUnload() -{ - for(var i=0;i='0'&&sBStr.charAt(i)<='9') - { - sNum+=sBStr.charAt(i++); - } - if(sNum!=""){ - var nNum=parseInt(sNum,16); - sText+=String.fromCharCode(nNum); - sBStr=sBStr.substring(i); - } - nPos=sBStr.indexOf('%'); - } - sText+=sBStr; - return sText; -} - -function excapeSingleQuotandSlash(str) -{ - if(str==null) return null; - var nPos=0; - var sRes=""; - var nPosNew=str.indexOf("\\",nPos); - while(nPosNew!=-1){ - sRes+=str.substring(nPos,nPosNew+1)+"\\"; - nPos=nPosNew+1; - nPosNew=str.indexOf("\\",nPos); - } - if(nPos=4) - { - if(navigator.appName=="Netscape") - { - gbNav4=true; - if(gnVerMajor>=5) - gbNav6=true; - } - gbIE4=(navigator.appName.indexOf("Microsoft")!=-1); - } - if(gbNav6) - { - var nPos=gAgent.indexOf("gecko"); - if(nPos!=-1) - { - var nPos2=gAgent.indexOf("/", nPos); - if(nPos2!=-1) - { - var nVersion=parseFloat(gAgent.substring(nPos2+1)); - if(nVersion>=20010726) - { - gbNav61=true; - if (nVersion>=20020823) - gbNav7=true; - } - } - } - }else if(gbIE4) - { - var nPos=gAgent.indexOf("msie"); - if(nPos!=-1) - { - var nVersion=parseFloat(gAgent.substring(nPos+5)); - if(nVersion>=5) - { - gbIE5=true; - if(nVersion>=5.5) - gbIE55=true; - } - } - } -} -else if (gbOpera) -{ - var nPos = gAgent.indexOf("opera"); - if(nPos!=-1) - { - var nVersion=parseFloat(gAgent.substring(nPos+6)); - if(nVersion>=6) - { - gbOpera6=true; - if(nVersion>=7) - gbOpera7=true; - } - } -} -else if (gbKonqueror) -{ - var nPos = gAgent.indexOf("konqueror"); - if(nPos!=-1) - { - var nVersion = parseFloat(gAgent.substring(nPos+10)); - if (nVersion >= 3) - { - gbKonqueror3=true; - } - } -} - -var gbWhVer=true; \ No newline at end of file diff --git a/doc/salome/tui/Makefile.am b/doc/salome/tui/Makefile.am index 8e7772c65..7df0f1a78 100644 --- a/doc/salome/tui/Makefile.am +++ b/doc/salome/tui/Makefile.am @@ -28,14 +28,14 @@ dev_docs: cp -fr $(srcdir)/SMESH ./INPUT; \ cp -f ./SMESH/doxyfile ./INPUT; \ cd INPUT; \ - sed 's|../../../share/salome|$(root_srcdir)|' ./doxyfile > ./doxyfile1; \ + 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; \ + $(DOXYGEN) -u ./doxyfile1; \ else \ sed 's|python_extension_must_be_here||' ./doxyfile1 > ./doxyfile2; \ mv -f doxyfile2 doxyfile1; \ @@ -46,7 +46,7 @@ dev_docs: fi; \ mv -f doxyfile1 doxyfile; \ echo "Running doxygen in directory:"`pwd`; \ - $(doxygen) ./doxyfile; \ + $(DOXYGEN) ./doxyfile; \ cd ../; \ cp -fr $(srcdir)/SMESH/sources/ SMESH ; \ rm -fr INPUT diff --git a/doc/salome/tui/SMESH/doxyfile.in b/doc/salome/tui/SMESH/doxyfile.in index e9705fdea..d5f133fb0 100755 --- a/doc/salome/tui/SMESH/doxyfile.in +++ b/doc/salome/tui/SMESH/doxyfile.in @@ -77,8 +77,7 @@ WARN_LOGFILE = log.txt # 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 = diff --git a/idl/SMESH_BasicHypothesis.idl b/idl/SMESH_BasicHypothesis.idl index cf2984bb3..5978aa052 100644 --- a/idl/SMESH_BasicHypothesis.idl +++ b/idl/SMESH_BasicHypothesis.idl @@ -43,13 +43,33 @@ module StdMeshers /*! * Sets parameter value */ - void SetLength(in double length) + void SetLength(in double length) + raises (SALOME::SALOME_Exception); + + /*! + * Sets 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 parameter value */ double GetLength(); + + /*! + * Returns parameter value + */ + double GetPrecision(); }; /*! @@ -85,7 +105,7 @@ module StdMeshers /*! * Sets parameter value */ - void SetNumberOfSegments(in long segmentsNumber) + void SetNumberOfSegments(in long segmentsNumber) raises (SALOME::SALOME_Exception); /*! @@ -603,6 +623,22 @@ module StdMeshers { }; + /*! + * 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 diff --git a/idl/SMESH_Gen.idl b/idl/SMESH_Gen.idl index 92270813b..96083e189 100644 --- a/idl/SMESH_Gen.idl +++ b/idl/SMESH_Gen.idl @@ -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 // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // // @@ -43,6 +43,35 @@ module SMESH interface FilterManager; interface SMESH_Pattern; + /*! + * 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 */ @@ -82,6 +111,8 @@ module SMESH interface SMESH_Gen : Engines::Component, SALOMEDS::Driver { + //GEOM::GEOM_Gen SetGeomEngine( in string containerLoc ); + void SetGeomEngine( in GEOM::GEOM_Gen geomcompo ); FilterManager CreateFilterManager(); @@ -244,6 +275,12 @@ module SMESH 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); }; }; diff --git a/idl/SMESH_Group.idl b/idl/SMESH_Group.idl index 2ef815f1b..ee6d0f391 100644 --- a/idl/SMESH_Group.idl +++ b/idl/SMESH_Group.idl @@ -28,6 +28,7 @@ #include "SALOME_Exception.idl" #include "SALOME_GenericObj.idl" +#include "SALOMEDS_Attributes.idl" #include "SMESH_Mesh.idl" @@ -85,13 +86,25 @@ module SMESH */ SMESH_Mesh GetMesh(); + /*! + * Sets group color + */ + void SetColor(in SALOMEDS::Color theColor); + + /*! + * Returns group color + */ + SALOMEDS::Color GetColor(); + /*! * Sets group color number + * (corresponds to the "hue" parameter of the color - must be in range [0, 360]) */ 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(); }; diff --git a/idl/SMESH_Mesh.idl b/idl/SMESH_Mesh.idl index 0e9d8ceb8..b04164177 100644 --- a/idl/SMESH_Mesh.idl +++ b/idl/SMESH_Mesh.idl @@ -93,6 +93,14 @@ module SMESH 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 @@ -246,6 +254,12 @@ module SMESH 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 @@ -335,6 +349,20 @@ module SMESH 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 */ @@ -382,6 +410,11 @@ module SMESH 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 * (UNV supported version is I-DEAS 10) @@ -517,6 +550,11 @@ module SMESH */ 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 there is not node for given ID - returns -1 diff --git a/idl/SMESH_MeshEditor.idl b/idl/SMESH_MeshEditor.idl index a4dfb1d32..121f8a307 100644 --- a/idl/SMESH_MeshEditor.idl +++ b/idl/SMESH_MeshEditor.idl @@ -106,6 +106,46 @@ module SMESH */ 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); @@ -215,22 +255,64 @@ module SMESH 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 @@ -243,18 +325,36 @@ module SMESH 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, @@ -274,6 +374,15 @@ module SMESH 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, @@ -283,6 +392,15 @@ module SMESH 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 @@ -298,33 +416,77 @@ module SMESH 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 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); diff --git a/resources/Makefile.am b/resources/Makefile.am index f7ea6685b..6ce20153b 100644 --- a/resources/Makefile.am +++ b/resources/Makefile.am @@ -53,6 +53,7 @@ dist_salomeres_DATA = \ mesh_info.png \ advanced_mesh_info.png \ standard_mesh_info.png \ + mesh_whatis.png \ mesh_init.png \ mesh_length.png \ mesh_length_2d.png \ diff --git a/resources/SMESHCatalog.xml.in b/resources/SMESHCatalog.xml.in index d5d2bb072..81539e614 100644 --- a/resources/SMESHCatalog.xml.in +++ b/resources/SMESHCatalog.xml.in @@ -8,6 +8,11 @@ + + + + + diff --git a/resources/SMESH_en.xml b/resources/SMESH_en.xml index 6702d3e21..1deca1ab3 100644 --- a/resources/SMESH_en.xml +++ b/resources/SMESH_en.xml @@ -70,6 +70,7 @@ + @@ -179,6 +180,7 @@ + @@ -194,6 +196,7 @@ + @@ -207,6 +210,7 @@ + @@ -229,6 +233,7 @@ + @@ -284,6 +289,7 @@ + @@ -341,6 +347,7 @@ + @@ -414,6 +421,7 @@ + diff --git a/resources/SalomeApp.xml b/resources/SalomeApp.xml index 0c4b44de6..9a8e1f229 100644 --- a/resources/SalomeApp.xml +++ b/resources/SalomeApp.xml @@ -16,6 +16,7 @@ + @@ -49,5 +50,7 @@ + + diff --git a/resources/StdMeshers.xml b/resources/StdMeshers.xml index 9b1a1dfaf..72fc3c05d 100644 --- a/resources/StdMeshers.xml +++ b/resources/StdMeshers.xml @@ -60,6 +60,7 @@ + + + + diff --git a/resources/mesh_tree_mesh_partial.png b/resources/mesh_tree_mesh_partial.png index 2ab75b32ddd6097d1fc068cc27f320efd253cd9b..2d7f09ca991c1bb957dc03238a61f6c53f0e5b13 100755 GIT binary patch literal 27767 zcmb@u2UJtfw+qjU{;K3f>gCBN zUW$fZIb6r-f!>xZQ$7olk{@mW|54_7?sL^Ec4u-)mwi`8AQF* ze%5sVljq}ei4|Odg-CE&iem(gKWQeoDajc$sYL5 zLfz2`h+MptBXWn#a1Y#Vx6PP(w!ORu0kZ&yRa^Vh&zzz1qzin_45{;og<9_a6NraF z%)yPj$~(Gdzr#bp`GS+Bpy!9k9Zf*776r)|Pzc#!m~H{*OzjNzwY`Jv4EI_54ydU* z#2KbLoDxH3)|0T5)U_4>a{iMWtqtRsd{=RHe5G`;I6(YIP?!1t2zYZvf0B{0KXP`| z)wvXnnTh9|WaZ|_zEjUgknKmTZWe<#J*L!q(Ts~8E zX(eAtSX7(j!tId9FXJ9Nn0ScC@O^rH@8Ov@Hc~0)5u5CR=`bj)bbIIqWgDxeojxby zH2#y%Cxh_eR^w+uFclyXX}g zM^8VwiPj0FbXd!zbb3LSqs}lbmWFouj6yQ_O0U_TE>$&^v%*|t756L`s~1GcZEobL z*G(!0khnv5*8ZZGZDdwh*tXM^Ypj@#*rwZTH19LVN{9+=)jbSbs5Ik6YKup>JVT$wh^uwUEVg&b|{!q>hN zP3bsWL|*Yt{fcD$nG(`SUH$HgjJM0 z4x01ob_Th18ug>jwEI0b8dV;qQFA4RS_{WHT~A5g_AJ93H9KE&V)zY@{0UN z+BeidqLP;B(jn~3(%+lVQn5!Au}4q0mYGJ)Db0mKnU~aVz;B8&d;o@)kLpOb-C0h~ zqA0g{`iR{k@lN8_>@y7;!wwd37d<_DSbI2y>jsql?!#wioC3MueDkxy(+#k~vgM zeeWs@|A{vFB<)J4US&o-q|7=b@V1`zP-1eC+!TtrX@4wA=_Qc=onwVi=#x&B|0mME z^O>v?OJgZ}p69s^(g*TcWc{jH+^fm3xO-~FHX{5s9sHlnT3<@^Qa2{U<1*&sB1@3x z;NeJ!kr6C<$7Y-4Qjj2gEBxY` zpYvCPC(o$Q;$$J7-mWe2#pU%yO8b9*SYWNQEL(!K@OrXX1o*%QzfeuKp}KIe1^c{GON;=3o!}Gs9coPxoWswp*cA`v+*pn8q(n zu299Ys(9A-Wh{{Xtd*qA9{m|Vb#dF>XG6(fV#YK0LSuqW`eZlyoW8h`?@-(8;0Gi% z?b$LOKaOJ>KXLK#O9~mt;MFC2Ci6y-$lhHcU1%>ao@+_dM0YNz6VpGh>9+vSXx*9Q zhP@jdu$2cWYTDqVb%pDJ!Z+{ ze)GMtI$iYB*u(6~{b!n+-`3DPVGw&lv8>qu!?QHB^&d@)|g}X)*y`^#yN+<_m|-oe{8{6`uBEGO`E6>;^~#oY6l{v z>_7M)fhH4H)}v{P7+r)>J`IAwQC{zQG}RNRm)5IP0e2^(l66jB>ncdyzeBr-`Q;^y z(tYbpPR4HGg89W8w=4-&)_EGT$zbdNHF>6K`!!

    A0~cu1CS1@wq5Bo!^9NWZj9d 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 S<&6JNjjAN4CR;0Q8umY6YpgQ> delta 286 zcmV+(0pb4l*a5i$kR^X-K}|sb0I`mI`%#ks001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK z0Cg|`0P0`>06Lcd02gnUshQLO006{EL_t(|oMQa{|33pc03d*v$kGJ_00G1TV=w|C zl<^-38F6UpF07*qoM6N<$f_Q&ndH?_b diff --git a/resources/mesh_whatis.png b/resources/mesh_whatis.png new file mode 100755 index 0000000000000000000000000000000000000000..1b39f3544c0fc3c9c78be530a9531b9e5e767c32 GIT binary patch literal 414 zcmV;P0b%}$P)-FE+k8vD%S%l@c6q;wtN;K207*qo IM6N<$f;I-X^8f$< literal 0 HcmV?d00001 diff --git a/src/DriverMED/DriverMED_Family.cxx b/src/DriverMED/DriverMED_Family.cxx index 45438ee6d..16363f8e6 100644 --- a/src/DriverMED/DriverMED_Family.cxx +++ b/src/DriverMED/DriverMED_Family.cxx @@ -381,13 +381,8 @@ void DriverMED_Family::Init (SMESHDS_GroupBase* theGroup) myGroupNames.clear(); myGroupNames.insert(string(theGroup->GetStoreName())); - myGroupAttributVal = 0; - - if (theGroup->GetColorGroup()!=0) - { - myGroupAttributVal = theGroup->GetColorGroup(); - } - + Quantity_Color aColor = theGroup->GetColor(); + myGroupAttributVal = aColor.Hue(); } //============================================================================= diff --git a/src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx b/src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx index f87bd3f07..e500ed3ad 100644 --- a/src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx +++ b/src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx @@ -182,9 +182,9 @@ DriverMED_R_SMESHDS_Mesh 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; @@ -345,6 +345,7 @@ DriverMED_R_SMESHDS_Mesh case ePENTA15: aNbNodes = 15; break; case eHEXA8: aNbNodes = 8; break; case eHEXA20: aNbNodes = 20; break; + case ePOINT1: aNbNodes = 1; break; default:; } vector aNodeIds(aNbNodes); @@ -378,14 +379,14 @@ DriverMED_R_SMESHDS_Mesh 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)); - switch(aGeom){ + switch(aGeom) { case eSEG2: if(anIsElemNum) anElement = myMesh->AddEdgeWithID(aNodeIds[0], @@ -671,6 +672,10 @@ DriverMED_R_SMESHDS_Mesh isRenum = anIsElemNum; } break; + + case ePOINT1: + anElement = FindNode(myMesh,aNodeIds[0]); + break; } #ifndef _DEXCEPT_ }catch(const std::exception& exc){ @@ -790,7 +795,7 @@ void DriverMED_R_SMESHDS_Mesh::GetGroup(SMESHDS_Group* theGroup) theGroup->SMDSGroup().Add(element); } if ( element ) - theGroup->SetType( element->GetType() ); + theGroup->SetType( theGroup->SMDSGroup().GetType() ); } } } diff --git a/src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx b/src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx index 1043e5594..f5370662b 100644 --- a/src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx +++ b/src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx @@ -66,6 +66,24 @@ void DriverMED_W_SMESHDS_Mesh::SetFile(const std::string& theFileName) 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(majeur, mineur, release); + else + MED::GetVersionRelease(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; @@ -262,6 +280,17 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform() 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(); diff --git a/src/DriverMED/DriverMED_W_SMESHDS_Mesh.h b/src/DriverMED/DriverMED_W_SMESHDS_Mesh.h index 80f792298..899c4375b 100644 --- a/src/DriverMED/DriverMED_W_SMESHDS_Mesh.h +++ b/src/DriverMED/DriverMED_W_SMESHDS_Mesh.h @@ -48,6 +48,7 @@ class MESHDRIVERMED_EXPORT DriverMED_W_SMESHDS_Mesh: public Driver_SMESHDS_Mesh 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() */ diff --git a/src/DriverUNV/Makefile.am b/src/DriverUNV/Makefile.am index 4fed7d82c..68bd05cf7 100644 --- a/src/DriverUNV/Makefile.am +++ b/src/DriverUNV/Makefile.am @@ -63,6 +63,8 @@ UNV_Test_SOURCES = \ libMeshDriverUNV_la_CPPFLAGS = \ $(KERNEL_CXXFLAGS) \ $(CAS_CPPFLAGS) \ + $(CORBA_CXXFLAGS) \ + $(CORBA_INCLUDES) \ $(BOOST_CPPFLAGS) \ -I$(srcdir)/../Driver \ -I$(srcdir)/../SMDS \ diff --git a/src/DriverUNV/UNV2417_Structure.cxx b/src/DriverUNV/UNV2417_Structure.cxx index 67d2cbe25..a9da97d62 100644 --- a/src/DriverUNV/UNV2417_Structure.cxx +++ b/src/DriverUNV/UNV2417_Structure.cxx @@ -34,8 +34,9 @@ static int MYDEBUG = 0; #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"; @@ -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; - 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; } diff --git a/src/MEFISTO2/aptrte.cxx b/src/MEFISTO2/aptrte.cxx index 26691946a..8768bd1cc 100755 --- a/src/MEFISTO2/aptrte.cxx +++ b/src/MEFISTO2/aptrte.cxx @@ -475,7 +475,7 @@ void aptrte( Z nutysu, R aretmx, if( ierr != 0 ) goto ERREUR; //qualites de la triangulation actuelle - qualitetrte_( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr, + qualitetrte( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr, nbt, quamoy, quamin ); // boucle sur les aretes internes (non sur une ligne de la frontiere) @@ -494,7 +494,7 @@ void aptrte( Z nutysu, R aretmx, << d << " secondes"); //qualites de la triangulation actuelle - qualitetrte_( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr, + qualitetrte( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr, nbt, quamoy, quamin ); // detection des aretes frontalieres initiales perdues @@ -529,7 +529,7 @@ void aptrte( Z nutysu, R aretmx, if( ierr != 0 ) goto ERREUR; //qualites de la triangulation actuelle - qualitetrte_( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr, + qualitetrte( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr, nbt, quamoy, quamin ); // fin de la triangulation avec respect des aretes initiales frontalieres @@ -570,7 +570,7 @@ void aptrte( Z nutysu, R aretmx, if( ierr != 0 ) goto ERREUR; //qualites de la triangulation actuelle - qualitetrte_( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr, + qualitetrte( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr, nbt, quamoy, quamin ); // amelioration de la qualite de la triangulation par @@ -585,7 +585,7 @@ void aptrte( Z nutysu, R aretmx, cout << "aptrte: MC saturee mnarcf3=" << mnarcf3 << endl; goto ERREUR; } - teamqt_( nutysu, aretmx, airemx, + teamqt( nutysu, aretmx, airemx, mnarst, mosoar, mxsoar, n1soar, mnsoar, moartr, mxartr, n1artr, mnartr, mxarcf, mnarcf2, mnarcf3, @@ -605,7 +605,7 @@ void aptrte( Z nutysu, R aretmx, if( ierr != 0 ) goto ERREUR; //qualites de la triangulation finale - qualitetrte_( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr, + qualitetrte( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr, nbt, quamoy, quamin ); // renumerotation des sommets internes: mnarst(i)=numero final du sommet @@ -734,9 +734,11 @@ void aptrte( Z nutysu, R aretmx, goto NETTOYAGE; } } - - -void qualitetrte_( R3 *mnpxyd, +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 ) @@ -831,7 +833,7 @@ void qualitetrte_( R3 *mnpxyd, if( quamin<0.3 ) { //le numero des 3 sommets du triangle ntqmin de qualite minimale - nusotr_( ntqmin, mosoar, mnsoar, moartr, mnartr, nosotr ); + nusotr(ntqmin, mosoar, mnsoar, moartr, mnartr, nosotr ); MESSAGE("Triangle de qualite minimale "<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 -// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - MEFISTO2D_EXPORT void aptrte( Z nutysu, R aretmx, @@ -160,6 +126,7 @@ MEFISTO2D_EXPORT #define nusotr NUSOTR #define qutr2d QUTR2D #define surtd2 SURTD2 + #define qualitetrte QUALITETRTE #define areteideale ARETEIDEALE @@ -180,12 +147,50 @@ MEFISTO2D_EXPORT #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 diff --git a/src/Makefile.am b/src/Makefile.am index 350144b07..941a72227 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -39,11 +39,16 @@ SUBDIRS = \ SMESH \ SMESH_I \ SMESHClient \ - OBJECT \ - SMESHFiltersSelection \ - SMESHGUI \ SMESH_SWIG \ MEFISTO2 \ StdMeshers \ - StdMeshers_I \ + StdMeshers_I + +if SMESH_ENABLE_GUI + SUBDIRS += \ + OBJECT \ + SMESHFiltersSelection \ + SMESHGUI \ + SMESH_SWIG_WITHIHM \ StdMeshersGUI +endif diff --git a/src/OBJECT/SMESH_Actor.cxx b/src/OBJECT/SMESH_Actor.cxx index db2265289..06a9d822b 100644 --- a/src/OBJECT/SMESH_Actor.cxx +++ b/src/OBJECT/SMESH_Actor.cxx @@ -988,7 +988,7 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation){ if(myIsCellsLabeled) myCellsLabels->VisibilityOn(); } - + UpdateHighlight(); Modified(); } @@ -1190,9 +1190,9 @@ void SMESH_ActorDef::UpdateHighlight(){ myHighlitableActor->SetRepresentation(SMESH_DeviceActor::eWireframe); }else if(myRepresentation == ePoint || GetPointRepresentation()){ myHighlitableActor->SetHighlited(anIsVisible); - myHighlitableActor->SetVisibility(anIsVisible); myHighlitableActor->GetExtractUnstructuredGrid()-> SetModeOfExtraction(VTKViewer_ExtractUnstructuredGrid::ePoints); + myHighlitableActor->SetVisibility(anIsVisible); myHighlitableActor->SetRepresentation(SMESH_DeviceActor::ePoint); } } diff --git a/src/OBJECT/SMESH_Object.cxx b/src/OBJECT/SMESH_Object.cxx index aa06545ee..9bdc652a0 100644 --- a/src/OBJECT/SMESH_Object.cxx +++ b/src/OBJECT/SMESH_Object.cxx @@ -199,7 +199,7 @@ void SMESH_VisualObjDef::createPoints( vtkPoints* thePoints ) //================================================================================= void SMESH_VisualObjDef::buildPrs() { - try + try { mySMDS2VTKNodes.clear(); myVTK2SMDSNodes.clear(); @@ -211,13 +211,16 @@ void SMESH_VisualObjDef::buildPrs() else buildElemPrs(); } - catch( const std::exception& exc ) - { - INFOS("Follow exception was cought:\n\t"<SetPoints( 0 ); + myGrid->SetCells( 0, 0, 0 ); + throw; } if( MYDEBUG ) MESSAGE( "Update - myGrid->GetNumberOfCells() = "<GetNumberOfCells() ); @@ -230,8 +233,12 @@ void SMESH_VisualObjDef::buildPrs() //================================================================================= 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 ); + SMDS_Mesh::CheckMemory(); myGrid->SetPoints( aPoints ); aPoints->Delete(); @@ -291,6 +298,10 @@ void SMESH_VisualObjDef::buildElemPrs() 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 @@ -314,16 +325,22 @@ void SMESH_VisualObjDef::buildElemPrs() vtkCellArray* aConnectivity = vtkCellArray::New(); aConnectivity->Allocate( aCellsSize, 0 ); + SMDS_Mesh::CheckMemory(); // PAL16631 + 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); + SMDS_Mesh::CheckMemory(); // PAL16631 + for ( int i = 0; i <= 2; i++ ) // iterate through edges, faces and volumes { if( nbEnts[ aTypes[ i ] ] > 0 ) @@ -424,6 +441,7 @@ void SMESH_VisualObjDef::buildElemPrs() iElem++; } } + SMDS_Mesh::CheckMemory(); // PAL16631 } // Insert cells in grid @@ -432,6 +450,8 @@ void SMESH_VisualObjDef::buildElemPrs() 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 ) ); @@ -442,6 +462,8 @@ void SMESH_VisualObjDef::buildElemPrs() aCellTypesArray->Delete(); aConnectivity->Delete(); anIdList->Delete(); + + SMDS_Mesh::CheckMemory(); // PAL16631 } //================================================================================= @@ -516,11 +538,14 @@ SMESH_MeshObj::~SMESH_MeshObj() // 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 - if ( myClient.Update(theIsClear) ) + if ( myClient.Update(theIsClear) || GetUnstructuredGrid()->GetNumberOfPoints()==0) { buildPrs(); // Fill unstructured grid + return true; + } + return false; } //================================================================================= @@ -675,10 +700,11 @@ void SMESH_SubMeshObj::UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunc // 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(); + return changed; } diff --git a/src/OBJECT/SMESH_Object.h b/src/OBJECT/SMESH_Object.h index 9e2f49dcf..0366866b5 100644 --- a/src/OBJECT/SMESH_Object.h +++ b/src/OBJECT/SMESH_Object.h @@ -55,7 +55,7 @@ class vtkUnstructuredGrid; class SMESHOBJECT_EXPORT SMESH_VisualObj { 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; diff --git a/src/OBJECT/SMESH_ObjectDef.h b/src/OBJECT/SMESH_ObjectDef.h index 327664867..7c8ba5480 100644 --- a/src/OBJECT/SMESH_ObjectDef.h +++ b/src/OBJECT/SMESH_ObjectDef.h @@ -61,7 +61,7 @@ public: 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; @@ -112,7 +112,7 @@ 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; @@ -142,7 +142,7 @@ 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 ); diff --git a/src/SMDS/Makefile.am b/src/SMDS/Makefile.am index 7e172f834..c3ba3e753 100644 --- a/src/SMDS/Makefile.am +++ b/src/SMDS/Makefile.am @@ -61,7 +61,8 @@ salomeinclude_HEADERS = \ SMDS_QuadraticFaceOfNodes.hxx \ SMDS_QuadraticVolumeOfNodes.hxx \ SMDS_SetIterator.hxx \ - SMESH_SMDS.hxx + SMESH_SMDS.hxx \ + SMDS_MeshInfo.hxx # Libraries targets @@ -104,3 +105,11 @@ libSMDS_la_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/SMDSAbs_ElementType.hxx b/src/SMDS/SMDSAbs_ElementType.hxx index fed89972f..0ce02cd9a 100644 --- a/src/SMDS/SMDSAbs_ElementType.hxx +++ b/src/SMDS/SMDSAbs_ElementType.hxx @@ -35,7 +35,14 @@ enum SMDSAbs_ElementType 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 diff --git a/src/SMDS/SMDS_Iterator.hxx b/src/SMDS/SMDS_Iterator.hxx index 5d17b6fa2..5685541b6 100644 --- a/src/SMDS/SMDS_Iterator.hxx +++ b/src/SMDS/SMDS_Iterator.hxx @@ -28,14 +28,14 @@ ///Abstract class for iterators ///@author Jerome Robert /////////////////////////////////////////////////////////////////////////////// -template class SMDS_EXPORT SMDS_Iterator +template class SMDS_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 - virtual VALUE next()=0; + virtual VALUE next()=0; /// Delete the current element and step to the next one virtual void remove(){} diff --git a/src/SMDS/SMDS_MemoryLimit.cxx b/src/SMDS/SMDS_MemoryLimit.cxx new file mode 100644 index 000000000..e31a9a498 --- /dev/null +++ b/src/SMDS/SMDS_MemoryLimit.cxx @@ -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 +#endif + +#ifdef _DEBUG_ +#include +#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; +} diff --git a/src/SMDS/SMDS_Mesh.cxx b/src/SMDS/SMDS_Mesh.cxx index bf40922dd..44d4259b2 100644 --- a/src/SMDS/SMDS_Mesh.cxx +++ b/src/SMDS/SMDS_Mesh.cxx @@ -39,6 +39,61 @@ #include using namespace std; +#ifndef WIN32 +#include +#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 /////////////////////////////////////////////////////////////////////////////// @@ -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){ + CheckMemory(); SMDS_MeshNode * node=new SMDS_MeshNode(x, y, z); myNodes.Add(node); myNodeIDFactory->BindID(ID,node); + myInfo.myNbNodes++; return node; }else return NULL; @@ -143,6 +200,7 @@ SMDS_MeshEdge* SMDS_Mesh::AddEdgeWithID(const SMDS_MeshNode * n1, { if ( !n1 || !n2 ) return 0; + CheckMemory(); 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); + myInfo.myNbEdges++; return edge; } else { @@ -280,8 +339,10 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshEdge * e1, return NULL; if ( !e1 || !e2 || !e3 ) return 0; + CheckMemory(); SMDS_MeshFace * face = new SMDS_FaceOfEdges(e1,e2,e3); myFaces.Add(face); + myInfo.myNbTriangles++; 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; + CheckMemory(); SMDS_MeshFace * face = new SMDS_FaceOfEdges(e1,e2,e3,e4); myFaces.Add(face); + myInfo.myNbQuadrangles++; 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; + CheckMemory(); 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); + myInfo.myNbTetras++; } 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); + myInfo.myNbTetras++; } 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; + CheckMemory(); 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); + myInfo.myNbPyramids++; } 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); + myInfo.myNbPyramids++; } 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; + CheckMemory(); 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); + myInfo.myNbPrisms++; } 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); + myInfo.myNbPrisms++; } 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; + CheckMemory(); 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); + myInfo.myNbHexas++; } 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); + myInfo.myNbHexas++; } 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; + CheckMemory(); SMDS_MeshVolume * volume = new SMDS_VolumeOfFaces(f1,f2,f3,f4); myVolumes.Add(volume); + myInfo.myNbTetras++; 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; + CheckMemory(); SMDS_MeshVolume * volume = new SMDS_VolumeOfFaces(f1,f2,f3,f4,f5); myVolumes.Add(volume); + myInfo.myNbPyramids++; 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; + CheckMemory(); SMDS_MeshVolume * volume = new SMDS_VolumeOfFaces(f1,f2,f3,f4,f5,f6); myVolumes.Add(volume); + myInfo.myNbPrisms++; if (!registerElement(ID, volume)) { RemoveElement(volume, false); @@ -829,6 +910,7 @@ SMDS_MeshFace* SMDS_Mesh::AddPolygonalFaceWithID { SMDS_MeshFace * face; + CheckMemory(); 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); + myInfo.myNbPolygons++; } if (!registerElement(ID, face)) { @@ -892,6 +975,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddPolyhedralVolumeWithID const int ID) { SMDS_MeshVolume* volume; + CheckMemory(); 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); + myInfo.myNbPolyhedrons++; } 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; - 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; - 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 : //======================================================================= -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 oldNodes; - SMDS_ElemIteratorPtr itn = elem->nodesIterator(); + SMDS_ElemIteratorPtr itn = element->nodesIterator(); while(itn->more()) oldNodes.insert( itn->next() ); + if ( !element->IsPoly() ) + myInfo.remove( element ); // element may change type + // change nodes bool Ok = false; + SMDS_MeshElement* elem = const_cast(element); switch ( elem->GetType() ) { case SMDSAbs_Edge: { if ( nbnodes == 2 ) { - const SMDS_MeshEdge* edge = dynamic_cast( elem ); - if ( edge ) - Ok = const_cast( edge )->ChangeNodes( nodes[0], nodes[1] ); + if ( SMDS_MeshEdge* edge = dynamic_cast( elem )) + Ok = edge->ChangeNodes( nodes[0], nodes[1] ); } else if ( nbnodes == 3 ) { - const SMDS_QuadraticEdge* edge = dynamic_cast( elem ); - if ( edge ) - Ok = const_cast( edge )->ChangeNodes( nodes[0], nodes[1], nodes[2] ); + if ( SMDS_QuadraticEdge* edge = dynamic_cast( elem )) + Ok = edge->ChangeNodes( nodes[0], nodes[1], nodes[2] ); } break; } case SMDSAbs_Face: { - const SMDS_FaceOfNodes* face = dynamic_cast( elem ); - if ( face ) { - Ok = const_cast( face )->ChangeNodes( nodes, nbnodes ); - } - else { - const SMDS_QuadraticFaceOfNodes* QF = - dynamic_cast( elem ); - if ( QF ) { - Ok = const_cast( QF )->ChangeNodes( nodes, nbnodes ); - } - else { - /// ??? begin - const SMDS_PolygonalFaceOfNodes* face = dynamic_cast(elem); - if (face) { - Ok = const_cast(face)->ChangeNodes(nodes, nbnodes); - } - /// ??? end - } - } + if ( SMDS_FaceOfNodes* face = dynamic_cast( elem )) + Ok = face->ChangeNodes( nodes, nbnodes ); + else + if ( SMDS_QuadraticFaceOfNodes* QF = dynamic_cast( elem )) + Ok = QF->ChangeNodes( nodes, nbnodes ); + else + if (SMDS_PolygonalFaceOfNodes* face = dynamic_cast(elem)) + Ok = face->ChangeNodes(nodes, nbnodes); break; } - //case SMDSAbs_PolygonalFace: { - // const SMDS_PolygonalFaceOfNodes* face = dynamic_cast(elem); - // if (face) { - // Ok = const_cast(face)->ChangeNodes(nodes, nbnodes); - // } - // break; - //} case SMDSAbs_Volume: { - const SMDS_VolumeOfNodes* vol = dynamic_cast( elem ); - if ( vol ) { - Ok = const_cast( vol )->ChangeNodes( nodes, nbnodes ); - } - else { - const SMDS_QuadraticVolumeOfNodes* QV = dynamic_cast( elem ); - if ( QV ) { - Ok = const_cast( QV )->ChangeNodes( nodes, nbnodes ); - } - } + if ( SMDS_VolumeOfNodes* vol = dynamic_cast( elem )) + Ok = vol->ChangeNodes( nodes, nbnodes ); + else + if ( SMDS_QuadraticVolumeOfNodes* QV = dynamic_cast( elem )) + Ok = QV->ChangeNodes( nodes, nbnodes ); break; } default: @@ -1160,18 +1230,19 @@ bool SMDS_Mesh::ChangeElementNodes(const SMDS_MeshElement * elem, if ( Ok ) { // update InverseElements + set::iterator it; + // 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( 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 - set::iterator it; for ( it = oldNodes.begin(); it != oldNodes.end(); it++ ) { SMDS_MeshNode * n = static_cast @@ -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; } @@ -1189,9 +1261,9 @@ bool SMDS_Mesh::ChangeElementNodes(const SMDS_MeshElement * elem, //function : ChangePolyhedronNodes //purpose : to change nodes of polyhedral volume //======================================================================= -bool SMDS_Mesh::ChangePolyhedronNodes (const SMDS_MeshElement * elem, - std::vector nodes, - std::vector quantities) +bool SMDS_Mesh::ChangePolyhedronNodes (const SMDS_MeshElement * elem, + const vector& nodes, + const vector & quantities) { 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(); + set::iterator it; 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(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 - set::iterator it; for (it = oldNodes.begin(); it != oldNodes.end(); it++) { SMDS_MeshNode * n = static_cast (const_cast( *it )); @@ -1290,9 +1363,11 @@ SMDS_MeshEdge* SMDS_Mesh::FindEdgeOrCreate(const SMDS_MeshNode * node1, SMDS_MeshEdge * toReturn=NULL; toReturn=const_cast(FindEdge(node1,node2)); if(toReturn==NULL) { + CheckMemory(); toReturn=new SMDS_MeshEdge(node1,node2); myEdges.Add(toReturn); - } + myInfo.myNbEdges++; + } return toReturn; } @@ -2214,14 +2289,17 @@ void SMDS_Mesh::RemoveElement(const SMDS_MeshElement * elem, case SMDSAbs_Edge: myEdges.Remove(static_cast (const_cast(*it))); + myInfo.RemoveEdge(*it); break; case SMDSAbs_Face: myFaces.Remove(static_cast (const_cast(*it))); + myInfo.RemoveFace(*it); break; case SMDSAbs_Volume: myVolumes.Remove(static_cast (const_cast(*it))); + myInfo.RemoveVolume(*it); break; } //MESSAGE( "SMDS: RM elem " << (*it)->GetID() ); @@ -2240,6 +2318,7 @@ void SMDS_Mesh::RemoveElement(const SMDS_MeshElement * elem, //MESSAGE( "SMDS: RM node " << (*it)->GetID() ); myNodes.Remove(static_cast (const_cast(*it))); + myInfo.myNbNodes--; myNodeIDFactory->ReleaseID((*it)->GetID()); removedNodes.push_back( (*it) ); delete *it; @@ -2264,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(n)); + myInfo.myNbNodes--; myNodeIDFactory->ReleaseID(elem->GetID()); delete elem; } @@ -2285,14 +2365,17 @@ void SMDS_Mesh::RemoveFreeElement(const SMDS_MeshElement * elem) case SMDSAbs_Edge: myEdges.Remove(static_cast (const_cast(elem))); + myInfo.RemoveEdge(elem); break; case SMDSAbs_Face: myFaces.Remove(static_cast (const_cast(elem))); + myInfo.RemoveFace(elem); break; case SMDSAbs_Volume: myVolumes.Remove(static_cast (const_cast(elem))); + myInfo.RemoveVolume(elem); break; default: break; @@ -2483,6 +2566,7 @@ SMDS_MeshEdge* SMDS_Mesh::AddEdgeWithID(const SMDS_MeshNode * n1, node2->AddInverseElement(edge); node12->AddInverseElement(edge); myEdges.Add(edge); + myInfo.myNbQuadEdges++; return edge; } else { @@ -2544,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); + myInfo.myNbQuadTriangles++; if (!registerElement(ID, face)) { RemoveElement(face, false); @@ -2610,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); + myInfo.myNbQuadQuadrangles++; if (!registerElement(ID, face)) { RemoveElement(face, false); @@ -2688,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); + myInfo.myNbQuadTetras++; if (!registerElement(ID, volume)) { RemoveElement(volume, false); @@ -2778,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); + myInfo.myNbQuadPyramids++; if (!registerElement(ID, volume)) { RemoveElement(volume, false); @@ -2876,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); + myInfo.myNbQuadPrisms++; if (!registerElement(ID, volume)) { RemoveElement(volume, false); @@ -2989,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); + myInfo.myNbQuadHexas++; if (!registerElement(ID, volume)) { RemoveElement(volume, false); @@ -2996,4 +3086,3 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1, } return volume; } - diff --git a/src/SMDS/SMDS_Mesh.hxx b/src/SMDS/SMDS_Mesh.hxx index 2cdf3749b..c4c0098c2 100644 --- a/src/SMDS/SMDS_Mesh.hxx +++ b/src/SMDS/SMDS_Mesh.hxx @@ -34,6 +34,7 @@ #include "SMDS_MeshFace.hxx" #include "SMDS_MeshVolume.hxx" #include "SMDS_MeshElementIDFactory.hxx" +#include "SMDS_MeshInfo.hxx" #include "SMDS_ElemIterator.hxx" #include @@ -432,12 +433,12 @@ public: 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 nodes, - std::vector quantities); + bool ChangeElementNodes(const SMDS_MeshElement * elem, + const SMDS_MeshNode * nodes[], + const int nbnodes); + bool ChangePolyhedronNodes(const SMDS_MeshElement * elem, + const std::vector& nodes, + const std::vector & quantities); virtual void Renumber (const bool isNodes, const int startID = 1, const int deltaID = 1); // Renumber all nodes or elements. @@ -482,11 +483,19 @@ public: const SMDS_MeshFace *FindFace(std::vector nodes_ids) const; static const SMDS_MeshFace* FindFace(std::vector 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; + const SMDS_MeshInfo& GetMeshInfo() const { return myInfo; } int NbNodes() const; int NbEdges() const; @@ -549,15 +558,16 @@ 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 myChildren; SMDS_MeshElementIDFactory *myNodeIDFactory; SMDS_MeshElementIDFactory *myElementIDFactory; - + SMDS_MeshInfo myInfo; + bool myHasConstructionEdges; bool myHasConstructionFaces; bool myHasInverseElements; diff --git a/src/SMDS/SMDS_MeshGroup.cxx b/src/SMDS/SMDS_MeshGroup.cxx index adbde5081..e003c9219 100644 --- a/src/SMDS/SMDS_MeshGroup.cxx +++ b/src/SMDS/SMDS_MeshGroup.cxx @@ -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(); - else if (theElem->GetType() != myType) + else if (theElem->GetType() != myType) { MESSAGE("SMDS_MeshGroup::Add : Type Mismatch "<GetType()<<"!="< myNb; // pointers to myNb... fields + vector 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 diff --git a/src/SMDS/SMDS_VolumeTool.cxx b/src/SMDS/SMDS_VolumeTool.cxx index 142da59cb..3094a761f 100644 --- a/src/SMDS/SMDS_VolumeTool.cxx +++ b/src/SMDS/SMDS_VolumeTool.cxx @@ -1326,7 +1326,7 @@ bool SMDS_VolumeTool::IsFreeFace( int faceIndex ) if ( IsFaceExternal( faceIndex )) intNormal = XYZ( -intNormal.x, -intNormal.y, -intNormal.z ); XYZ p0 ( nodes[0] ), baryCenter; - for ( vNbIt = volNbShared.begin(); vNbIt != volNbShared.end();vNbIt++ ) { + for ( vNbIt = volNbShared.begin(); vNbIt != volNbShared.end(); vNbIt++ ) { int nbShared = (*vNbIt).second; if ( nbShared >= 3 ) { SMDS_VolumeTool volume( (*vNbIt).first ); @@ -1651,3 +1651,22 @@ int SMDS_VolumeTool::NbFaceNodes(VolumeType type, return 0; } +//======================================================================= +//function : Get +//purpose : return element +//======================================================================= + +const SMDS_MeshVolume* SMDS_VolumeTool::Get() const +{ + return static_cast( myVolume ); +} + +//======================================================================= +//function : ID +//purpose : return element ID +//======================================================================= + +int SMDS_VolumeTool::ID() const +{ + return myVolume ? myVolume->GetID() : 0; +} diff --git a/src/SMDS/SMDS_VolumeTool.hxx b/src/SMDS/SMDS_VolumeTool.hxx index 8a1c77d43..5eb5a0755 100644 --- a/src/SMDS/SMDS_VolumeTool.hxx +++ b/src/SMDS/SMDS_VolumeTool.hxx @@ -35,6 +35,7 @@ class SMDS_MeshElement; class SMDS_MeshNode; class SMDS_PolyhedralVolumeOfNodes; +class SMDS_MeshVolume; #include #include @@ -62,6 +63,12 @@ class SMDS_EXPORT SMDS_VolumeTool // 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 // ----------------------- diff --git a/src/SMDS/SMESH_SMDS.hxx b/src/SMDS/SMESH_SMDS.hxx index 207cf7210..d354e130e 100755 --- a/src/SMDS/SMESH_SMDS.hxx +++ b/src/SMDS/SMESH_SMDS.hxx @@ -36,4 +36,4 @@ #define SMDS_EXPORT #endif -#endif \ No newline at end of file +#endif diff --git a/src/SMESH/SMESH_0D_Algo.hxx b/src/SMESH/SMESH_0D_Algo.hxx index 9064e717d..66d0e47f6 100644 --- a/src/SMESH/SMESH_0D_Algo.hxx +++ b/src/SMESH/SMESH_0D_Algo.hxx @@ -28,9 +28,11 @@ #ifndef _SMESH_0D_ALGO_HXX_ #define _SMESH_0D_ALGO_HXX_ +#include "SMESH_SMESH.hxx" + #include "SMESH_Algo.hxx" -class SMESH_0D_Algo: public SMESH_Algo +class SMESH_EXPORT SMESH_0D_Algo: public SMESH_Algo { public: SMESH_0D_Algo(int hypId, int studyId, SMESH_Gen* gen); diff --git a/src/SMESH/SMESH_2D_Algo.cxx b/src/SMESH/SMESH_2D_Algo.cxx index 84d0db491..ade8abfb7 100644 --- a/src/SMESH/SMESH_2D_Algo.cxx +++ b/src/SMESH/SMESH_2D_Algo.cxx @@ -26,13 +26,15 @@ // Module : SMESH // $Header$ +using namespace std; #include "SMESH_2D_Algo.hxx" #include "SMESH_Gen.hxx" -#include #include "utilities.h" -using namespace std; +#include +#include +#include //============================================================================= /*! diff --git a/src/SMESH/SMESH_Algo.cxx b/src/SMESH/SMESH_Algo.cxx index db07a004f..47346f2da 100644 --- a/src/SMESH/SMESH_Algo.cxx +++ b/src/SMESH/SMESH_Algo.cxx @@ -71,8 +71,8 @@ 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) { gen->_mapAlgo[hypId] = this; @@ -108,7 +108,7 @@ istream & SMESH_Algo::LoadFrom(istream & load) { return load; } const vector < string > &SMESH_Algo::GetCompatibleHypothesis() { - return _compatibleHypothesis; + return _compatibleHypothesis; } //============================================================================= @@ -132,7 +132,7 @@ SMESH_Algo::GetUsedHypothesis(SMESH_Mesh & aMesh, { 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; } diff --git a/src/SMESH/SMESH_Algo.hxx b/src/SMESH/SMESH_Algo.hxx index b27055c31..f08fd85e7 100644 --- a/src/SMESH/SMESH_Algo.hxx +++ b/src/SMESH/SMESH_Algo.hxx @@ -260,8 +260,14 @@ public: * \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); + 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 @@ -279,9 +285,10 @@ protected: */ bool error(int error, const SMESH_Comment& comment = ""); /*! - * \brief To be used as error in previous method + * \brief store COMPERR_ALGO_FAILED error and comment and then return false */ - SMESH_ComputeErrorName dfltErr() const { return COMPERR_ALGO_FAILED; } + bool error(const SMESH_Comment& comment = "") + { return error(COMPERR_ALGO_FAILED, comment); } /*! * \brief store error and return error->IsOK() */ diff --git a/src/SMESH/SMESH_Block.cxx b/src/SMESH/SMESH_Block.cxx index fa7fc282f..6a50ff019 100644 --- a/src/SMESH/SMESH_Block.cxx +++ b/src/SMESH/SMESH_Block.cxx @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -45,6 +46,8 @@ #include #include #include +#include +#include #include "SMDS_MeshNode.hxx" #include "SMDS_MeshVolume.hxx" @@ -55,7 +58,7 @@ using namespace std; -#define SQRT_FUNC 0 +//#define DEBUG_PARAM_COMPUTE //================================================================================ /*! @@ -381,24 +384,37 @@ bool SMESH_Block::ShellPoint(const gp_XYZ& theParams, const vector& 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]) + + y * (z1 * p[ID_V110] + z * p[ID_V111])); 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]) + + z * (x1 * p[ID_E0y1] + x * p[ID_E1y1]); return true; } +//======================================================================= +//function : Constructor +//purpose : +//======================================================================= + +SMESH_Block::SMESH_Block(): + myNbIterations(0), + mySumDist(0.), + myTolerance(-1.) // to be re-initialized +{ +} + + //======================================================================= //function : NbVariables //purpose : @@ -428,12 +444,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 - theFxyz( 1 ) = myValues[ 0 ]; + theFxyz( 1 ) = funcValue( myValues[ SQUARE_DIST ]); } else { ShellPoint( params, P ); gp_Vec dP( P - myPoint ); - theFxyz(1) = SQRT_FUNC ? dP.SquareMagnitude() : dP.Magnitude(); + theFxyz(1) = funcValue( dP.SquareMagnitude() ); } return true; } @@ -445,55 +461,60 @@ Standard_Boolean SMESH_Block::Value(const math_Vector& theXYZ, math_Vector& theF 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); } //======================================================================= -//function : Values +//function : GetStateNumber //purpose : //======================================================================= -//#define DEBUG_PARAM_COMPUTE +Standard_Integer SMESH_Block::GetStateNumber () +{ + return 0; //myValues[0] < 1e-1; +} + +//======================================================================= +//function : Values +//purpose : +//======================================================================= Standard_Boolean SMESH_Block::Values(const math_Vector& theXYZ, math_Vector& theFxyz, math_Matrix& theDf) { -// MESSAGE( endl<<"SMESH_Block::Values( "< 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; -// } +#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 { + double Dis = plnNorm * P - plnNorm * myPoint; + theDf( 1, iP + 1 ) = Dis/Direc; + } +#endif } #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 - //myNbIterations +=3; // how many time call ShellPoint() // 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; } +//============================================================================ +//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(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() <<" )"< 0 ) + theParams.SetCoord( myFaceIndex, myFaceParam ); + + return true; +} + //======================================================================= //function : ComputeParameters //purpose : compute point parameters in the block @@ -558,7 +631,8 @@ Standard_Boolean SMESH_Block::Values(const math_Vector& theXYZ, 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; @@ -575,19 +649,17 @@ bool SMESH_Block::ComputeParameters(const gp_Pnt& thePoint, return false; } -// MESSAGE( endl<<"SMESH_Block::ComputeParameters( " -// <X(); - start( 2 ) = bestParam->Y(); - start( 3 ) = bestParam->Z(); + start = *bestParam; } myFaceIndex = -1; + myFaceParam = 0.; 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 ); #ifdef DEBUG_PARAM_COMPUTE cout << " #### POINT " < 1e-1 && nbLoops++ < 10 ) { - paramSearch.Perform ( *static_cast(this), - start, low, up ); - if ( !paramSearch.IsDone() ) { - //MESSAGE( " !paramSearch.IsDone() " ); + + 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++; } #ifdef DEBUG_PARAM_COMPUTE - cout << "-------SOLUTION-------: " << endl - << myParam.X() << " " << myParam.Y() << " " << myParam.Z() << endl - << " ------ DIST :" << myValues[0] << endl; + myNbIterations += nbLoops*4; // how many times ShellPoint called + mySumDist += sqrt( sqDistance ); + cout << " ------ SOLUTION: ( "<= 0 ) - myParam.SetCoord( myFaceIndex + 1, myFaceParam ); + theParams = solution; - theParams = myParam; + if ( myFaceIndex > 0 ) + theParams.SetCoord( myFaceIndex, myFaceParam ); return true; } @@ -734,18 +860,6 @@ bool SMESH_Block::EdgeParameters(const int theEdgeID, const double theU, gp_XYZ& return false; } -//======================================================================= -//function : GetStateNumber -//purpose : -//======================================================================= - -Standard_Integer SMESH_Block::GetStateNumber () -{ -// MESSAGE( endl<<"SMESH_Block::GetStateNumber( "< edgeIdVec(4, -1); GetFaceEdgesIDs( iF, edgeIdVec ); - tFace.Set( iF, myEdge[ edgeIdVec [ 0 ]], myEdge[ edgeIdVec [ 1 ]]); + tFace.Set( iF, myEdge[ edgeIdVec [ 0 ] - ID_Ex00], myEdge[ edgeIdVec [ 1 ] - ID_Ex00]); } return true; @@ -1593,4 +1707,3 @@ void SMESH_Block::GetEdgeVertexIDs (const int edgeID, vector< int >& vertexVec ) MESSAGE(" GetEdgeVertexIDs(), wrong edge ID: " << edgeID ); } } - diff --git a/src/SMESH/SMESH_Block.hxx b/src/SMESH/SMESH_Block.hxx index 392160279..c5bbc1e2f 100644 --- a/src/SMESH/SMESH_Block.hxx +++ b/src/SMESH/SMESH_Block.hxx @@ -27,22 +27,19 @@ #include "SMESH_SMESH.hxx" -#include -#include -#include +//#include +//#include +//#include + #include #include #include #include #include #include -#include -#include #include #include #include -#include -#include #include #include @@ -53,6 +50,7 @@ class SMDS_MeshNode; class Adaptor3d_Surface; class Adaptor2d_Curve2d; class Adaptor3d_Curve; +class gp_Pnt; // ========================================================= // class calculating coordinates of 3D points by normalized @@ -147,7 +145,7 @@ class SMESH_EXPORT SMESH_Block: public math_FunctionSetWithDerivatives // Initialization // --------------- - SMESH_Block (): myNbIterations(0), mySumDist(0.) {} + SMESH_Block(); bool LoadBlockShapes(const TopoDS_Shell& theShell, const TopoDS_Vertex& theVertex000, @@ -242,7 +240,8 @@ public: 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() @@ -362,14 +361,21 @@ public: // 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; + double myTolerance; + bool mySquareFunc; gp_XYZ myPoint; // the given point gp_XYZ myParam; // the best parameters guess - double myValues[ 4 ]; // values computed at myParam: function value and 3 derivatives + double myValues[ 4 ]; // values computed at myParam: square distance and 3 derivatives typedef pair TxyzPair; TxyzPair my3x3x3GridNodes[ 27 ]; // to compute the first param guess diff --git a/src/SMESH/SMESH_Gen.cxx b/src/SMESH/SMESH_Gen.cxx index 3c34f2e63..29f896bf8 100644 --- a/src/SMESH/SMESH_Gen.cxx +++ b/src/SMESH/SMESH_Gen.cxx @@ -29,6 +29,7 @@ #include "SMESH_Gen.hxx" #include "SMESH_subMesh.hxx" #include "SMESH_HypoFilter.hxx" +#include "SMESHDS_Document.hxx" #include "SMDS_MeshElement.hxx" #include "SMDS_MeshNode.hxx" @@ -162,6 +163,14 @@ bool SMESH_Gen::Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape) if (smToCompute->GetComputeState() == SMESH_subMesh::FAILED_TO_COMPUTE) ret = false;; } + if ((algo && !aMesh.HasShapeToMesh())) + { + if (smToCompute->GetComputeState() == SMESH_subMesh::READY_TO_COMPUTE) + smToCompute->ComputeStateEngine( SMESH_subMesh::COMPUTE ); + + if (smToCompute->GetComputeState() == SMESH_subMesh::FAILED_TO_COMPUTE) + ret = false;; + } } // ----------------------------------------------- @@ -301,7 +310,7 @@ static bool checkMissing(SMESH_Gen* aGen, 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() ); theErrors.back().Set( SMESH_Hypothesis::HYP_MISSING, shapeDim, true ); @@ -320,12 +329,16 @@ static bool checkMissing(SMESH_Gen* aGen, SMESH_Hypothesis::Hypothesis_Status status; algo->CheckHypothesis( aMesh, aSubMesh->GetSubShape(), status ); if ( status == SMESH_Hypothesis::HYP_BAD_PARAMETER ) { - INFOS( "ERROR: hypothesis of " << (IsGlobalHypothesis ? "Global " : "Local ") - << "<" << algo->GetName() << "> has a bad parameter value"); - errName = 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 { - INFOS( "ERROR: " << (IsGlobalHypothesis ? "Global " : "Local ") - << "<" << algo->GetName() << "> misses some hypothesis"); + MESSAGE( "ERROR: " << (IsGlobalHypothesis ? "Global " : "Local ") + << "<" << algo->GetName() << "> misses some hypothesis"); } if (IsGlobalHypothesis) globalChecked[ algo->GetDim() ] = true; diff --git a/src/SMESH/SMESH_Gen.hxx b/src/SMESH/SMESH_Gen.hxx index 1aa8e9684..f642500ec 100644 --- a/src/SMESH/SMESH_Gen.hxx +++ b/src/SMESH/SMESH_Gen.hxx @@ -42,12 +42,12 @@ #include "SMESH_3D_Algo.hxx" #include "SMESH_Mesh.hxx" -#include "SMESHDS_Document.hxx" - #include #include +class SMESHDS_Document; + typedef SMESH_Hypothesis::Hypothesis_Status TAlgoStateErrorName; typedef struct studyContextStruct diff --git a/src/SMESH/SMESH_Group.hxx b/src/SMESH/SMESH_Group.hxx index 1b13bc578..76f9cc079 100644 --- a/src/SMESH/SMESH_Group.hxx +++ b/src/SMESH/SMESH_Group.hxx @@ -30,11 +30,11 @@ #include "SMESH_SMESH.hxx" -#include +#include "SMDSAbs_ElementType.hxx" + #include #include - class SMESHDS_GroupBase; class SMESH_Mesh; @@ -55,9 +55,6 @@ class SMESH_EXPORT SMESH_Group 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 @@ -66,7 +63,6 @@ class SMESH_EXPORT SMESH_Group SMESHDS_GroupBase * myGroupDS; std::string myName; - int myColorNumber; }; #endif diff --git a/src/SMESH/SMESH_HypoFilter.hxx b/src/SMESH/SMESH_HypoFilter.hxx index ca883167e..041166d41 100644 --- a/src/SMESH/SMESH_HypoFilter.hxx +++ b/src/SMESH/SMESH_HypoFilter.hxx @@ -78,9 +78,15 @@ class SMESH_EXPORT SMESH_HypoFilter: public SMESH_HypoPredicate 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; - // check aHyp or/and aShape it is assigned to + /*! + * \brief return true if contains no predicates + */ + bool IsAny() const { return myPredicates.empty(); } ~SMESH_HypoFilter(); diff --git a/src/SMESH/SMESH_Mesh.cxx b/src/SMESH/SMESH_Mesh.cxx index 0f464bf0f..0b361a52b 100644 --- a/src/SMESH/SMESH_Mesh.cxx +++ b/src/SMESH/SMESH_Mesh.cxx @@ -35,7 +35,9 @@ #include "SMESHDS_Group.hxx" #include "SMESHDS_Script.hxx" #include "SMESHDS_GroupOnGeom.hxx" +#include "SMESHDS_Document.hxx" #include "SMDS_MeshVolume.hxx" +#include "SMDS_SetIterator.hxx" #include "utilities.h" @@ -48,19 +50,13 @@ #include "DriverUNV_R_SMDS_Mesh.h" #include "DriverSTL_R_SMDS_Mesh.h" -#include #include -#include -#include - -#include #include -#include -#include +#include #include +#include #include - -#include +#include #include "Utils_ExceptHandlers.hxx" @@ -98,6 +94,7 @@ SMESH_Mesh::SMESH_Mesh(int theLocalId, _idDoc = theDocument->NewMesh(theIsEmbeddedMode); _myMeshDS = theDocument->GetMesh(_idDoc); _isShapeToMesh = false; + _isAutoColor = false; _myMeshDS->ShapeToMesh( PseudoShape() ); } @@ -153,7 +150,6 @@ void SMESH_Mesh::ShapeToMesh(const TopoDS_Shape & aShape) i_gr++; } _mapAncestors.Clear(); - _mapPropagationChains.Clear(); // clear SMESHDS TopoDS_Shape aNullShape; @@ -215,7 +211,7 @@ int SMESH_Mesh::UNVToMesh(const char* theFileName) if(MYDEBUG) MESSAGE("UNVToMesh - theFileName = "<GetStudyContext(_studyId)->mapHypothesis[anHypId]; + GetMeshDS()->AddHypothesis( aSubShape, anHyp ); + if ( SMESH_Hypothesis::IsStatusFatal( aBestRet )) return aBestRet; return aWorstNotFatal; @@ -466,6 +466,9 @@ SMESH_Hypothesis::Hypothesis_Status 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; @@ -717,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); @@ -725,13 +728,12 @@ SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const TopoDS_Shape & aSubShape) int index = _myMeshDS->ShapeToIndex(aSubShape); - map ::iterator i_sm = _mapSubMesh.find(index); + map ::const_iterator i_sm = _mapSubMesh.find(index); if ( i_sm != _mapSubMesh.end()) aSubMesh = i_sm->second; return aSubMesh; } - //============================================================================= /*! * Get the SMESH_subMesh object implementation. Dont create it, return null @@ -739,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); - map ::iterator i_sm = _mapSubMesh.find(aShapeID); + map ::const_iterator i_sm = _mapSubMesh.find(aShapeID); if (i_sm == _mapSubMesh.end()) return NULL; return i_sm->second; } +//================================================================================ +/*! + * \brief Return submeshes of groups containing the given subshape + */ +//================================================================================ +list +SMESH_Mesh::GetGroupSubMeshesContaining(const TopoDS_Shape & aSubShape) const + throw(SALOME_Exception) +{ + Unexpect aCatch(SalomeException); + list found; + + SMESH_subMesh * subMesh = GetSubMeshContaining(aSubShape); + if ( !subMesh ) + return found; + + // submeshes of groups have max IDs, so search from the map end + map::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 @@ -859,15 +895,29 @@ void SMESH_Mesh::NotifySubMeshesHypothesisModification(const SMESH_Hypothesis* h { aSubMesh->AlgoStateEngine(SMESH_subMesh::MODIF_HYP, const_cast< SMESH_Hypothesis*>( hyp )); - - if ( algo->GetDim() == 1 && IsPropagationHypothesis( aSubShape )) - CleanMeshOnPropagationChain( aSubShape ); } } } } } +//============================================================================= +/*! + * 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. @@ -980,221 +1030,156 @@ void SMESH_Mesh::ExportSTL(const char *file, const bool isascii) throw(SALOME_Ex myWriter.Perform(); } -//============================================================================= +//================================================================================ /*! - * + * \brief Return number of nodes in the mesh */ -//============================================================================= +//================================================================================ + 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); - 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); - 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); - 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); - 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 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); - 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); - 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); - 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); - 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); - 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 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); @@ -1210,7 +1195,7 @@ bool SMESH_Mesh::IsNotConformAllowed() const { 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 ); } @@ -1244,9 +1229,21 @@ SMESH_Group* SMESH_Mesh::AddGroup (const SMDSAbs_ElementType theType, return aGroup; } +//================================================================================ +/*! + * \brief Return iterator on all existing groups + */ +//================================================================================ + +SMESH_Mesh::GroupIteratorPtr SMESH_Mesh::GetGroups() const +{ + typedef map TMap; + return GroupIteratorPtr( new SMDS_mapIterator( _mapGroup )); +} + //============================================================================= /*! - * + * \brief Return a group by ID */ //============================================================================= @@ -1260,11 +1257,11 @@ SMESH_Group* SMESH_Mesh::GetGroup (const int theGroupID) //============================================================================= /*! - * + * \brief Return IDs of all groups */ //============================================================================= -list SMESH_Mesh::GetGroupIds() +list SMESH_Mesh::GetGroupIds() const { list anIds; for ( map::const_iterator it = _mapGroup.begin(); it != _mapGroup.end(); it++ ) @@ -1289,279 +1286,6 @@ void SMESH_Mesh::RemoveGroup (const int 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 - */ -//============================================================================= -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 - SMESH_IndexedMapOfShape& aChain = _mapPropagationChains.ChangeFromKey(theMainEdge); - if (aChain.Extent() > 0) { - CleanMeshOnPropagationChain(theMainEdge); - aChain.Clear(); - } - - // At first put 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 - 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 @@ -1581,6 +1305,7 @@ const TopTools_ListOfShape& SMESH_Mesh::GetAncestors(const TopoDS_Shape& theS) c //function : Dump //purpose : dumps contents of mesh to stream [ debug purposes ] //======================================================================= + ostream& SMESH_Mesh::Dump(ostream& save) { int clause = 0; @@ -1594,7 +1319,7 @@ ostream& SMESH_Mesh::Dump(ostream& save) for ( int isQuadratic = 0; isQuadratic < 2; ++isQuadratic ) { string orderStr = isQuadratic ? "quadratic" : "linear"; - ElementOrder order = isQuadratic ? ORDER_QUADRATIC : ORDER_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; @@ -1653,6 +1378,7 @@ ostream& SMESH_Mesh::Dump(ostream& save) //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 ); diff --git a/src/SMESH/SMESH_Mesh.hxx b/src/SMESH/SMESH_Mesh.hxx index d9538fe86..3005f678e 100644 --- a/src/SMESH/SMESH_Mesh.hxx +++ b/src/SMESH/SMESH_Mesh.hxx @@ -32,50 +32,27 @@ #include "SMESH_SMESH.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 "NMTTools_IndexedDataMapOfShapeIndexedMapOfShape.hxx" -#include "SMESH_IndexedDataMapOfShapeIndexedMapOfShape.hxx" - #include "Utils_SALOME_Exception.hxx" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include #include -#include #include #include -#include -#include - class SMESH_Gen; +class SMESHDS_Document; class SMESH_Group; class TopTools_ListOfShape; class SMESH_subMesh; class SMESH_HypoFilter; class TopoDS_Solid; -typedef SMESH_IndexedDataMapOfShapeIndexedMapOfShape IndexedMapOfChain; - class SMESH_EXPORT SMESH_Mesh { public: @@ -122,7 +99,7 @@ public: RemoveHypothesis(const TopoDS_Shape & aSubShape, int anHypId) throw(SALOME_Exception); - const list & + const std::list & GetHypothesisList(const TopoDS_Shape & aSubShape) const throw(SALOME_Exception); @@ -130,12 +107,12 @@ public: const SMESH_HypoFilter& aFilter, const bool andAncestors) const; - int GetHypotheses(const TopoDS_Shape & aSubShape, - const SMESH_HypoFilter& aFilter, - list & aHypList, - const bool andAncestors) const; + int GetHypotheses(const TopoDS_Shape & aSubShape, + const SMESH_HypoFilter& aFilter, + std::list & aHypList, + const bool andAncestors) const; - const list & GetLog() throw(SALOME_Exception); + const std::list & GetLog() throw(SALOME_Exception); void ClearLog() throw(SALOME_Exception); @@ -148,34 +125,52 @@ public: 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); - SMESH_subMesh *GetSubMeshContaining(const int aShapeID) + SMESH_subMesh *GetSubMeshContaining(const int aShapeID) const throw(SALOME_Exception); - + /*! + * \brief Return submeshes of groups containing the given subshape + */ + std::list GetGroupSubMeshesContaining(const TopoDS_Shape & shape) const + throw(SALOME_Exception); + /*! + * \brief Say all submeshes that theChangedHyp has been modified + */ 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); - // Return True if anHyp is used to mesh aSubShape - + /*! + * \brief check if a hypothesis alowing notconform mesh is present + */ bool IsNotConformAllowed() const; - // check if a hypothesis alowing notconform mesh is present 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; - // 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(); @@ -191,34 +186,25 @@ public: 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 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); @@ -231,36 +217,16 @@ public: int& theId, const TopoDS_Shape& theShape=TopoDS_Shape()); - SMESH_Group* GetGroup (const int theGroupID); + typedef boost::shared_ptr< SMDS_Iterator > GroupIteratorPtr; + GroupIteratorPtr GetGroups() const; - list GetGroupIds(); + std::list 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 + 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 from some other edge. - // Returns through the edge, from - // which the 1D hypothesis is propagated on + 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 ); // @@ -268,9 +234,6 @@ public: ostream& Dump(ostream & save); private: - // Propagation hypothesis management - void CleanMeshOnPropagationChain(const TopoDS_Shape& theMainEdge); - // protected: int _id; // id given by creator (unique within the creator instance) @@ -278,17 +241,17 @@ protected: 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 _subMeshesUsingHypothesisList; + std::list _subMeshesUsingHypothesisList; SMESHDS_Document * _myDocument; SMESHDS_Mesh * _myMeshDS; map _mapSubMesh; map _mapGroup; SMESH_Gen * _gen; + + bool _isAutoColor; TopTools_IndexedDataMapOfShapeListOfShape _mapAncestors; - IndexedMapOfChain _mapPropagationChains; // Propagation hypothesis management - protected: SMESH_Mesh() {}; SMESH_Mesh(const SMESH_Mesh&) {}; diff --git a/src/SMESH/SMESH_MeshEditor.cxx b/src/SMESH/SMESH_MeshEditor.cxx index 5ff5f6d17..b858c372f 100644 --- a/src/SMESH/SMESH_MeshEditor.cxx +++ b/src/SMESH/SMESH_MeshEditor.cxx @@ -35,6 +35,7 @@ #include "SMDS_FacePosition.hxx" #include "SMDS_SpacePosition.hxx" #include "SMDS_QuadraticFaceOfNodes.hxx" +#include "SMDS_MeshGroup.hxx" #include "SMESHDS_Group.hxx" #include "SMESHDS_Mesh.hxx" @@ -43,31 +44,35 @@ #include "SMESH_ControlsDef.hxx" #include "SMESH_MesherHelper.hxx" #include "SMESH_OctreeNode.hxx" +#include "SMESH_Group.hxx" #include "utilities.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include +#include #include #include +#include #include -#include +#include +#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include @@ -79,11 +84,8 @@ using namespace SMESH::Controls; typedef map > TElemOfNodeListMap; typedef map > TElemOfElemListMap; -typedef map > TNodeOfNodeListMap; -typedef TNodeOfNodeListMap::iterator TNodeOfNodeListMapItr; //typedef map > TNodeOfNodeVecMap; //typedef TNodeOfNodeVecMap::iterator TNodeOfNodeVecMapItr; -typedef map > TElemOfVecOfNnlmiMap; //typedef map > TElemOfVecOfMapNodesMap; struct TNodeXYZ : public gp_XYZ { @@ -92,9 +94,12 @@ struct TNodeXYZ : public gp_XYZ { 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 ) @@ -108,8 +113,8 @@ struct TLink: public NLink //purpose : //======================================================================= -SMESH_MeshEditor::SMESH_MeshEditor( SMESH_Mesh* theMesh ): -myMesh( theMesh ) +SMESH_MeshEditor::SMESH_MeshEditor( SMESH_Mesh* theMesh ) + :myMesh( theMesh ) // theMesh may be NULL { } @@ -269,18 +274,26 @@ bool SMESH_MeshEditor::Remove (const list< int >& theIDs, if ( !elem ) continue; - // Find sub-meshes to notify about modification - SMDS_ElemIteratorPtr nodeIt = elem->nodesIterator(); - while ( nodeIt->more() ) { - const SMDS_MeshNode* node = static_cast( 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 ); - } - } } + // Find sub-meshes to notify about modification +// SMDS_ElemIteratorPtr nodeIt = elem->nodesIterator(); +// while ( nodeIt->more() ) { +// const SMDS_MeshNode* node = static_cast( 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 ) @@ -296,9 +309,9 @@ bool SMESH_MeshEditor::Remove (const list< int >& theIDs, (*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; } @@ -1161,7 +1174,7 @@ void SMESH_MeshEditor::AddToSameGroups (const SMDS_MeshElement* elemToAdd, set::const_iterator grIt = groups.begin(); for ( ; grIt != groups.end(); grIt++ ) { SMESHDS_Group* group = dynamic_cast( *grIt ); - if ( group && group->SMDSGroup().Contains( elemInGroups )) + if ( group && group->Contains( elemInGroups )) group->SMDSGroup().Add( elemToAdd ); } } @@ -2731,26 +2744,28 @@ static bool isReverse(vector 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 & newNodesItVec, - list& newElems, - const int nbSteps, - SMESH_SequenceOfElemPtr& myLastCreatedElems) +void SMESH_MeshEditor::sweepElement(const SMDS_MeshElement* elem, + const vector & newNodesItVec, + list& 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(); - //---PR - //list::const_iterator itNN[ nbNodes ]; - vector::const_iterator> itNN( nbNodes ); - itNN.reserve(nbNodes); - //---PR - //const SMDS_MeshNode* prevNod[ nbNodes ], *nextNod[ nbNodes ]; + vector < list< const SMDS_MeshNode* >::const_iterator > itNN( nbNodes ); vector prevNod( nbNodes ); vector nextNod( nbNodes ); vector midlNod( nbNodes ); @@ -2826,8 +2841,7 @@ static void sweepElement(SMESHDS_Mesh* aMesh, } // 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]) { @@ -3043,6 +3057,7 @@ static void sweepElement(SMESHDS_Mesh* aMesh, if ( aNewElem ) { newElems.push_back( aNewElem ); myLastCreatedElems.Append(aNewElem); + srcElements.Append( elem ); } // set new prev nodes @@ -3053,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, - TIDSortedElemSet& 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() ); + SMESHDS_Mesh* aMesh = GetMeshDS(); // Find nodes belonging to only one initial element - sweep them to get edges. @@ -3093,7 +3115,7 @@ static void makeWalls (SMESHDS_Mesh* aMesh, if(!NotCreateEdge) { vector newNodesItVec( 1, nList ); list newEdges; - sweepElement( aMesh, node, newNodesItVec, newEdges, nbSteps, myLastCreatedElems ); + sweepElement( node, newNodesItVec, newEdges, nbSteps, srcElements ); } } } @@ -3111,17 +3133,21 @@ static void makeWalls (SMESHDS_Mesh* aMesh, // 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())); + srcElements.Append( myLastCreatedElems.Last() ); + } } 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())); + srcElements.Append( myLastCreatedElems.Last() ); + } } } if ( elem->GetType() != SMDSAbs_Face ) @@ -3149,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 )) { - 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 )) { - myLastCreatedElems.Append(aMesh->AddEdge( n1, n2 )); + myLastCreatedElems.Append(aMesh->AddEdge( n1, n2 )); // ceiling edge + srcElements.Append( myLastCreatedElems.Last() ); } } } @@ -3173,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 )) { - 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 )) { - myLastCreatedElems.Append(aMesh->AddEdge( n1, n2, n3 )); + myLastCreatedElems.Append(aMesh->AddEdge( n1, n2, n3 )); // ceiling edge + srcElements.Append( myLastCreatedElems.Last() ); } } } @@ -3192,37 +3222,62 @@ static void makeWalls (SMESHDS_Mesh* aMesh, if ( hasFreeLinks ) { list & newVolumes = itElem->second; - int iStep; //, nbSteps = vecNewNodes[0]->second.size(); int iVol, volNb, nbVolumesByStep = newVolumes.size() / nbSteps; - set initNodeSet, faceNodeSet; - for ( iNode = 0; iNode < nbNodes; iNode++ ) + set initNodeSet, topNodeSet, faceNodeSet; + for ( iNode = 0; iNode < nbNodes; iNode++ ) { initNodeSet.insert( vecNewNodes[ iNode ]->first ); - + topNodeSet .insert( vecNewNodes[ iNode ]->second.back() ); + } for ( volNb = 0; volNb < nbVolumesByStep; volNb++ ) { list::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 - fInd.push_back( iF ); + { + if ( nbSteps == 1 && faceNodeSet == topNodeSet ) + continue; + freeInd.push_back( iF ); + // find source edge of a free face iF + vector 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; - // 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(); - 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 ) { @@ -3272,7 +3327,11 @@ static void makeWalls (SMESHDS_Mesh* aMesh, 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++; @@ -3280,7 +3339,7 @@ static void makeWalls (SMESHDS_Mesh* aMesh, } } // 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() ); @@ -3324,6 +3383,9 @@ static void makeWalls (SMESHDS_Mesh* aMesh, myLastCreatedElems.Append(aMesh->AddPolygonalFace(polygon_nodes)); } } // switch + + while ( srcElements.Length() < myLastCreatedElems.Length() ) + srcElements.Append( myLastCreatedElems.Last() ); } } // loop on swept elements } @@ -3333,16 +3395,21 @@ static void makeWalls (SMESHDS_Mesh* aMesh, //purpose : //======================================================================= -void SMESH_MeshEditor::RotationSweep(TIDSortedElemSet & theElems, - const gp_Ax1& theAxis, - const double theAngle, - const int theNbSteps, - const double theTol, - const bool theMakeWalls) +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(); + // source elements for each generated one + SMESH_SequenceOfElemPtr srcElems, srcNodes; + MESSAGE( "RotationSweep()"); gp_Trsf aTrsf; aTrsf.SetRotation( theAxis, theAngle ); @@ -3369,11 +3436,10 @@ void SMESH_MeshEditor::RotationSweep(TIDSortedElemSet & theElems, // loop on elem nodes SMDS_ElemIteratorPtr itN = elem->nodesIterator(); - while ( itN->more() ) { - + while ( itN->more() ) + { // check if a node has been already sweeped - const SMDS_MeshNode* node = - static_cast( 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() )).first; @@ -3393,6 +3459,7 @@ void SMESH_MeshEditor::RotationSweep(TIDSortedElemSet & theElems, //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] ); @@ -3402,6 +3469,7 @@ void SMESH_MeshEditor::RotationSweep(TIDSortedElemSet & theElems, } newNode = aMesh->AddNode( coord[0], coord[1], coord[2] ); myLastCreatedNodes.Append(newNode); + srcNodes.Append( node ); } listNewNodes.push_back( newNode ); } @@ -3423,9 +3491,11 @@ void SMESH_MeshEditor::RotationSweep(TIDSortedElemSet & theElems, 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); + srcNodes.Append( node ); listNewNodes.push_back( newNode ); } } @@ -3434,12 +3504,17 @@ void SMESH_MeshEditor::RotationSweep(TIDSortedElemSet & theElems, newNodesItVec.push_back( nIt ); } // make new elements - sweepElement( aMesh, elem, newNodesItVec, newElemsMap[elem], theNbSteps, myLastCreatedElems ); + sweepElement( elem, newNodesItVec, newElemsMap[elem], theNbSteps, srcElems ); } if ( theMakeWalls ) - makeWalls( aMesh, mapNewNodes, newElemsMap, mapElemNewNodes, - theElems, theNbSteps, myLastCreatedElems ); + makeWalls( mapNewNodes, newElemsMap, mapElemNewNodes, theElems, theNbSteps, srcElems ); + + PGroupIDs newGroupIDs; + if ( theMakeGroups ) + newGroupIDs = generateGroups( srcNodes, srcElems, "rotated"); + + return newGroupIDs; } @@ -3492,12 +3567,14 @@ const SMDS_MeshNode* SMESH_MeshEditor::CreateNode(const double x, //purpose : //======================================================================= -void SMESH_MeshEditor::ExtrusionSweep (TIDSortedElemSet & 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); @@ -3507,8 +3584,8 @@ void SMESH_MeshEditor::ExtrusionSweep (TIDSortedElemSet & theElems, 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); } @@ -3517,15 +3594,20 @@ void SMESH_MeshEditor::ExtrusionSweep (TIDSortedElemSet & theElems, //purpose : //======================================================================= -void SMESH_MeshEditor::ExtrusionSweep (TIDSortedElemSet & 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(); + // source elements for each generated one + SMESH_SequenceOfElemPtr srcElems, srcNodes; + SMESHDS_Mesh* aMesh = GetMeshDS(); int nbsteps = theParams.mySteps->Length(); @@ -3549,11 +3631,10 @@ void SMESH_MeshEditor::ExtrusionSweep (TIDSortedElemSet & theElems, // loop on elem nodes SMDS_ElemIteratorPtr itN = elem->nodesIterator(); - while ( itN->more() ) { - + while ( itN->more() ) + { // check if a node has been already sweeped - const SMDS_MeshNode* node = - static_cast( 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() ) { @@ -3580,6 +3661,7 @@ void SMESH_MeshEditor::ExtrusionSweep (TIDSortedElemSet & theElems, else { const SMDS_MeshNode * newNode = aMesh->AddNode(x, y, z); myLastCreatedNodes.Append(newNode); + srcNodes.Append( node ); listNewNodes.push_back( newNode ); } } @@ -3596,6 +3678,7 @@ void SMESH_MeshEditor::ExtrusionSweep (TIDSortedElemSet & theElems, 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; } @@ -3621,6 +3704,7 @@ void SMESH_MeshEditor::ExtrusionSweep (TIDSortedElemSet & theElems, 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); @@ -3634,6 +3718,7 @@ void SMESH_MeshEditor::ExtrusionSweep (TIDSortedElemSet & theElems, else { const SMDS_MeshNode * newNode = aMesh->AddNode( coord[0], coord[1], coord[2] ); myLastCreatedNodes.Append(newNode); + srcNodes.Append( node ); listNewNodes.push_back( newNode ); } } @@ -3643,12 +3728,17 @@ void SMESH_MeshEditor::ExtrusionSweep (TIDSortedElemSet & theElems, 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 ) { - 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; } @@ -3707,12 +3797,15 @@ SMESH_MeshEditor::Extrusion_Error const bool theHasAngles, list& theAngles, const bool theHasRefPoint, - const gp_Pnt& theRefPoint) + const gp_Pnt& theRefPoint, + const bool theMakeGroups) { 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 aPrms; @@ -3895,9 +3988,11 @@ SMESH_MeshEditor::Extrusion_Error newNodesItVec.reserve( elem->NbNodes() ); // loop on elem nodes + int nodeIndex = -1; 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( itN->next() ); @@ -3966,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); + srcNodes.Append( node ); listNewNodes.push_back( newNode ); } aX = aPN1.X(); @@ -3973,6 +4069,7 @@ SMESH_MeshEditor::Extrusion_Error aZ = aPN1.Z(); const SMDS_MeshNode* newNode = aMesh->AddNode( aX, aY, aZ ); myLastCreatedNodes.Append(newNode); + srcNodes.Append( node ); listNewNodes.push_back( newNode ); aPN0 = aPN1; @@ -3998,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); + srcNodes.Append( node ); myLastCreatedNodes.Append(newN); aNodes[2*i] = newN; aNodes[2*i+1] = N; @@ -4016,12 +4114,13 @@ SMESH_MeshEditor::Extrusion_Error // 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; } @@ -4031,24 +4130,43 @@ SMESH_MeshEditor::Extrusion_Error //purpose : //======================================================================= -void SMESH_MeshEditor::Transform (TIDSortedElemSet & 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(); - bool needReverse; + bool needReverse = false; + string groupPostfix; switch ( theTrsf.Form() ) { case gp_PntMirror: + case gp_Ax1Mirror: 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; + 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; @@ -4057,6 +4175,9 @@ void SMESH_MeshEditor::Transform (TIDSortedElemSet & theElems, // nodes mirrored but are not in theElems are to be reversed TIDSortedElemSet inverseElemSet; + // source elements for each generated one + SMESH_SequenceOfElemPtr srcElems, srcNodes; + // loop on theElems TIDSortedElemSet::iterator itElem; for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) { @@ -4069,9 +4190,10 @@ void SMESH_MeshEditor::Transform (TIDSortedElemSet & theElems, while ( itN->more() ) { // check if a node has been already transformed - const SMDS_MeshNode* node = - static_cast( itN->next() ); - if (nodeMap.find( node ) != nodeMap.end() ) + const SMDS_MeshNode* node = cast2Node( itN->next() ); + pair n2n_isnew = + nodeMap.insert( make_pair ( node, node )); + if ( !n2n_isnew.second ) continue; double coord[3]; @@ -4079,10 +4201,17 @@ void SMESH_MeshEditor::Transform (TIDSortedElemSet & theElems, 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); + srcNodes.Append( node ); } else { aMesh->MoveNode( node, coord[0], coord[1], coord[2] ); @@ -4090,10 +4219,9 @@ void SMESH_MeshEditor::Transform (TIDSortedElemSet & theElems, const_cast< SMDS_MeshNode* > ( node )->SetPosition ( SMDS_SpacePosition::originSpacePosition() ); } - nodeMap.insert( TNodeNodeMap::value_type( node, newNode )); // keep inverse elements - if ( !theCopy && needReverse ) { + if ( !theCopy && !theTargetMesh && needReverse ) { SMDS_ElemIteratorPtr invElemIt = node->GetInverseElementIterator(); while ( invElemIt->more() ) { const SMDS_MeshElement* iel = invElemIt->next(); @@ -4103,16 +4231,13 @@ void SMESH_MeshEditor::Transform (TIDSortedElemSet & theElems, } } - // 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()) { - TIDSortedElemSet::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 @@ -4133,7 +4258,8 @@ void SMESH_MeshEditor::Transform (TIDSortedElemSet & theElems, { 0, 1, 2, 3, 4, 5, 6, 7 } // FORWARD }; - for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) { + for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) + { const SMDS_MeshElement* elem = *itElem; if ( !elem || elem->GetType() == SMDSAbs_Node ) continue; @@ -4166,8 +4292,13 @@ void SMESH_MeshEditor::Transform (TIDSortedElemSet & theElems, 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)); + srcElems.Append( elem ); } else { aMesh->ChangePolygonNodes(elem, poly_nodes); @@ -4178,7 +4309,7 @@ void SMESH_MeshEditor::Transform (TIDSortedElemSet & theElems, { // ATTENTION: Reversing is not yet done!!! const SMDS_PolyhedralVolumeOfNodes* aPolyedre = - (const SMDS_PolyhedralVolumeOfNodes*) elem; + dynamic_cast( elem ); if (!aPolyedre) { MESSAGE("Warning: bad volumic element"); continue; @@ -4205,26 +4336,31 @@ void SMESH_MeshEditor::Transform (TIDSortedElemSet & theElems, 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)); + srcElems.Append( elem ); } 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}; @@ -4276,17 +4412,159 @@ void SMESH_MeshEditor::Transform (TIDSortedElemSet & theElems, if ( iNode != nbNodes ) continue; // not all nodes transformed - if ( theCopy ) { - if ( SMDS_MeshElement* copy = AddElement( nodes, elem->GetType(), elem->IsPoly() )) + 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 ) 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 ); + 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(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; } //======================================================================= @@ -4553,10 +4831,7 @@ void SMESH_MeshEditor::MergeNodes (TListOfListOfNodes & theGroupsOfNodes) int aShapeId = FindShape( elem ); set nodeSet; - //const SMDS_MeshNode* curNodes[ nbNodes ], *uniqueNodes[ nbNodes ]; - const SMDS_MeshNode** curNodes = new const SMDS_MeshNode*[ nbNodes ]; - const SMDS_MeshNode** uniqueNodes = new const SMDS_MeshNode*[ nbNodes ]; - + vector< const SMDS_MeshNode*> curNodes( nbNodes ), uniqueNodes( nbNodes ); int iUnique = 0, iCur = 0, nbRepl = 0; vector iRepl( nbNodes ); @@ -5034,7 +5309,7 @@ void SMESH_MeshEditor::MergeNodes (TListOfListOfNodes & theGroupsOfNodes) } else { // Change regular element or polygon - aMesh->ChangeElementNodes( elem, uniqueNodes, nbUniqueNodes ); + aMesh->ChangeElementNodes( elem, & uniqueNodes[0], nbUniqueNodes ); } } else { @@ -5042,14 +5317,13 @@ void SMESH_MeshEditor::MergeNodes (TListOfListOfNodes & theGroupsOfNodes) rmElemIds.push_back( elem->GetID() ); } - delete curNodes; - delete uniqueNodes; } // loop on elements // Remove equal nodes and bad elements Remove( rmNodeIds, true ); Remove( rmElemIds, false ); + } @@ -5601,13 +5875,11 @@ SMESH_MeshEditor::Sew_Error const SMDS_MeshElement* elem = invElemIt->next(); // prepare data for a loop on links coming to prevSideNode, of a face or a volume int iPrevNode, iNode = 0, nbNodes = elem->NbNodes(); - //const SMDS_MeshNode* faceNodes[ nbNodes ]; - const SMDS_MeshNode** faceNodes = new const SMDS_MeshNode*[ nbNodes ]; + vector< const SMDS_MeshNode* > faceNodes( nbNodes, (const SMDS_MeshNode*)0 ); 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; - //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()) { @@ -5624,7 +5896,7 @@ SMESH_MeshEditor::Sew_Error else { SMDS_ElemIteratorPtr nIt = elem->nodesIterator(); while ( nIt->more() ) { - nodes[ iNode ] = static_cast( nIt->next() ); + nodes[ iNode ] = cast2Node( nIt->next() ); if ( nodes[ iNode++ ] == prevSideNode ) iPrevNode = iNode - 1; } @@ -5674,7 +5946,6 @@ SMESH_MeshEditor::Sew_Error } } } - delete faceNodes; } // loop on inverse elements of prevSideNode if ( !sideNode ) { @@ -5729,7 +6000,7 @@ SMESH_MeshEditor::Sew_Error { nodeGroupsToMerge.push_back( list() ); 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 { @@ -6338,7 +6609,7 @@ void SMESH_MeshEditor::UpdateVolumes (const SMDS_MeshNode* theBetweenNode */ //======================================================================= -int SMESH_MeshEditor::ConvertElemToQuadratic(SMESHDS_SubMesh * theSm, +int SMESH_MeshEditor::convertElemToQuadratic(SMESHDS_SubMesh * theSm, SMESH_MesherHelper& theHelper, const bool theForce3d) { @@ -6442,7 +6713,7 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d) SMESH_subMesh* sm = smIt->next(); if ( SMESHDS_SubMesh *smDS = sm->GetSubMeshDS() ) { aHelper.SetSubShape( sm->GetSubShape() ); - nbCheckedElems += ConvertElemToQuadratic(smDS, aHelper, theForce3d); + nbCheckedElems += convertElemToQuadratic(smDS, aHelper, theForce3d); } } } @@ -6553,7 +6824,7 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d) */ //======================================================================= -int SMESH_MeshEditor::RemoveQuadElem(SMESHDS_SubMesh * theSm, +int SMESH_MeshEditor::removeQuadElem(SMESHDS_SubMesh * theSm, SMDS_ElemIteratorPtr theItr, const int theShapeID) { @@ -6628,7 +6899,7 @@ bool SMESH_MeshEditor::ConvertFromQuadratic() while ( smIt->more() ) { SMESH_subMesh* sm = smIt->next(); if ( SMESHDS_SubMesh *smDS = sm->GetSubMeshDS() ) - nbCheckedElems += RemoveQuadElem( smDS, smDS->GetElements(), sm->GetId() ); + nbCheckedElems += removeQuadElem( smDS, smDS->GetElements(), sm->GetId() ); } } } @@ -6638,7 +6909,7 @@ bool SMESH_MeshEditor::ConvertFromQuadratic() if ( nbCheckedElems < totalNbElems ) // not all elements in submeshes { SMESHDS_SubMesh *aSM = 0; - RemoveQuadElem( aSM, GetMeshDS()->elementsIterator(), 0 ); + removeQuadElem( aSM, GetMeshDS()->elementsIterator(), 0 ); } return true; @@ -7249,7 +7520,9 @@ SMESH_MeshEditor::Sew_Error */ //================================================================================ +#ifdef _DEBUG_ //#define DEBUG_MATCHING_NODES +#endif SMESH_MeshEditor::Sew_Error SMESH_MeshEditor::FindMatchingNodes(set& theSide1, diff --git a/src/SMESH/SMESH_MeshEditor.hxx b/src/SMESH/SMESH_MeshEditor.hxx index 9b56a1f6c..fd5facec2 100644 --- a/src/SMESH/SMESH_MeshEditor.hxx +++ b/src/SMESH/SMESH_MeshEditor.hxx @@ -190,13 +190,15 @@ public: // If the2D, smoothing is performed using UV parameters of nodes // on geometrical faces - - void RotationSweep (TIDSortedElemSet & theElements, - const gp_Ax1& theAxis, - const double theAngle, - const int theNbSteps, - const double theToler, - const bool theMakeWalls=true); + typedef std::auto_ptr< std::list > PGroupIDs; + + 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 @@ -241,13 +243,13 @@ public: * param theTolerance - uses for comparing locations of nodes if flag * EXTRUSION_FLAG_SEW is set */ - void ExtrusionSweep - (TIDSortedElemSet & 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 @@ -259,11 +261,12 @@ public: * EXTRUSION_FLAG_SEW is set * param theParams - special structure for manage of extrusion */ - void ExtrusionSweep (TIDSortedElemSet & 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 @@ -285,13 +288,16 @@ public: const bool theHasAngles, std::list& theAngles, const bool theHasRefPoint, - const gp_Pnt& theRefPoint); + 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 - void Transform (TIDSortedElemSet & 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; @@ -507,7 +513,7 @@ private: * \brief Convert elements contained in a submesh to quadratic * \retval int - nb of checked elements */ - int ConvertElemToQuadratic(SMESHDS_SubMesh * theSm, + int convertElemToQuadratic(SMESHDS_SubMesh * theSm, SMESH_MesherHelper& theHelper, const bool theForce3d); @@ -515,11 +521,55 @@ private: * \brief Convert quadratic elements to linear ones and remove quadratic nodes * \retval int - nb of checked elements */ - int RemoveQuadElem( SMESHDS_SubMesh * theSm, + int removeQuadElem( SMESHDS_SubMesh * theSm, SMDS_ElemIteratorPtr theItr, const int theShapeID); - //Auxiliary function for "ConvertFromQuadratic" is intended to + /*! + * \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); + + + typedef std::map > TNodeOfNodeListMap; + typedef TNodeOfNodeListMap::iterator TNodeOfNodeListMapItr; + typedef std::vector TVecOfNnlmiMap; + typedef std::map 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 & newNodesItVec, + std::list& 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; diff --git a/src/SMESH/SMESH_MesherHelper.cxx b/src/SMESH/SMESH_MesherHelper.cxx index 6afe18300..5b74f1ded 100644 --- a/src/SMESH/SMESH_MesherHelper.cxx +++ b/src/SMESH/SMESH_MesherHelper.cxx @@ -35,11 +35,13 @@ #include #include #include +#include +#include #include +#include #include +#include #include -#include -#include #include #include @@ -73,6 +75,7 @@ bool SMESH_MesherHelper::IsQuadraticSubMesh(const TopoDS_Shape& aSh) // 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 ); @@ -150,6 +153,7 @@ void SMESH_MesherHelper::SetSubShape(const TopoDS_Shape& aSh) myShape = aSh; mySeamShapeIds.clear(); + myDegenShapeIds.clear(); if ( myShape.IsNull() ) { myShapeID = -1; @@ -165,8 +169,9 @@ void SMESH_MesherHelper::SetSubShape(const TopoDS_Shape& aSh) 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 @@ -186,10 +191,17 @@ void SMESH_MesherHelper::SetSubShape(const TopoDS_Shape& aSh) } } // 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() )); } + + // 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() )); + } } } } @@ -1128,3 +1140,36 @@ bool SMESH_MesherHelper::LoadNodeColumns(TParam2ColumnMap & theParam2ColumnMap, 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; +} + diff --git a/src/SMESH/SMESH_MesherHelper.hxx b/src/SMESH/SMESH_MesherHelper.hxx index 7798a0e12..41544a3f4 100644 --- a/src/SMESH/SMESH_MesherHelper.hxx +++ b/src/SMESH/SMESH_MesherHelper.hxx @@ -244,6 +244,15 @@ public: */ bool GetNodeUVneedInFaceNode(const TopoDS_Face& F = TopoDS_Face()) const; + /*! + * \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 + */ + 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 @@ -297,6 +306,14 @@ public: */ const NLinkNodeMap& GetNLinkNodeMap() const { return myNLinkNodeMap; } + /** + * 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: /*! @@ -312,9 +329,10 @@ protected: // Forbiden copy constructor SMESH_MesherHelper (const SMESH_MesherHelper& theOther) {}; - // special map for using during creation quadratic faces + // 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) diff --git a/src/SMESH/SMESH_Pattern.cxx b/src/SMESH/SMESH_Pattern.cxx index 44396d2af..4d3fe36f6 100644 --- a/src/SMESH/SMESH_Pattern.cxx +++ b/src/SMESH/SMESH_Pattern.cxx @@ -36,10 +36,12 @@ #include #include #include -#include +//#include #include #include +#include #include +#include #include #include #include @@ -47,7 +49,6 @@ #include #include #include -#include #include #include #include @@ -962,7 +963,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 ); - 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 ); @@ -985,6 +993,10 @@ static bool intersectIsolines(const gp_XY& uv11, const gp_XY& uv12, const double // resUV /= 2.; // } + if ( isDeformed ) { + MESSAGE("intersectIsolines(), d1 = " << d1 << ", d2 = " << d2 << ", delta = " << delta << + ", " << (loc1 - loc2).SquareModulus() << " > " << delta * delta); + } return true; } @@ -1384,7 +1396,7 @@ bool SMESH_Pattern:: compUVByElasticIsolines(const list< list< TPoint* > >& theBndPoints, const list< TPoint* >& thePntToCompute) { - //return false; + return false; // PAL17233 //cout << "============================== KEY POINTS =============================="<::iterator kpIt = myKeyPointIDs.begin(); // for ( ; kpIt != myKeyPointIDs.end(); kpIt++ ) { @@ -2659,6 +2671,162 @@ bool SMESH_Pattern::Apply (const SMDS_MeshFace* theFace, return setErrorCode( ERR_OK ); } +//======================================================================= +//function : Apply +//purpose : Compute nodes coordinates applying +// the loaded pattern to . The first key-point +// will be mapped into -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 : @@ -2687,7 +2855,8 @@ inline static bool isDefined(const gp_XYZ& theXYZ) // will be mapped into -th node //======================================================================= -bool SMESH_Pattern::Apply (std::set& theFaces, +bool SMESH_Pattern::Apply (SMESH_Mesh* theMesh, + std::set& theFaces, const int theNodeIndexOnKeyPoint1, const bool theReverse) { @@ -2725,11 +2894,29 @@ bool SMESH_Pattern::Apply (std::set& theFaces, 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::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; } @@ -3905,7 +4092,7 @@ void SMESH_Pattern::createElements(SMESH_Mesh* theMes SMESH_subMesh * subMesh; if ( !myShape.IsNull() ) { - subMesh = theMesh->GetSubMeshContaining( myShape ); + subMesh = theMesh->GetSubMesh( myShape ); if ( subMesh ) subMesh->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE ); } diff --git a/src/SMESH/SMESH_Pattern.hxx b/src/SMESH/SMESH_Pattern.hxx index 9699064ad..df1ccd0eb 100644 --- a/src/SMESH/SMESH_Pattern.hxx +++ b/src/SMESH/SMESH_Pattern.hxx @@ -103,7 +103,17 @@ class SMESH_EXPORT SMESH_Pattern { // the loaded pattern to . The first key-point // will be mapped into -th node - bool Apply (std::set& 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 . The first key-point + // will be mapped into -th node + + bool Apply (SMESH_Mesh* theMesh, + std::set& theFaces, const int theNodeIndexOnKeyPoint1, const bool theReverse); // Compute nodes coordinates applying diff --git a/src/SMESH/SMESH_subMesh.cxx b/src/SMESH/SMESH_subMesh.cxx index 3af807281..bbb5fa96a 100644 --- a/src/SMESH/SMESH_subMesh.cxx +++ b/src/SMESH/SMESH_subMesh.cxx @@ -44,20 +44,34 @@ #include #include #include -#include #include #include -#include -#include #include #include #include +#include +#include -#include +#include #include 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: @@ -397,10 +411,12 @@ const map < int, SMESH_subMesh * >& SMESH_subMesh::DependsOn() 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; } @@ -481,9 +497,14 @@ const TopoDS_Shape & SMESH_subMesh::GetSubShape() const 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 )); @@ -586,8 +607,9 @@ SMESH_Hypothesis::Hypothesis_Status // check if a shape needed by algo is present // ------------------------------------------- algo = static_cast< SMESH_Algo* >( anHyp ); - if ( !_father->HasShapeToMesh() && algo->NeedShape() ) - return SMESH_Hypothesis::HYP_BAD_GEOMETRY; + if(_father->GetShapeToMesh() != SMESH_Mesh::PseudoShape()) + if ( !_father->HasShapeToMesh() && algo->NeedShape() ) + return SMESH_Hypothesis::HYP_BAD_GEOMETRY; // ---------------------- // check mesh conformity // ---------------------- @@ -603,54 +625,22 @@ SMESH_Hypothesis::Hypothesis_Status if ( ! CanAddHypothesis( anHyp )) // check dimension 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 ( !meshDS->AddHypothesis(_subShape, anHyp)) return SMESH_Hypothesis::HYP_ALREADY_EXIST; - - // Serve Propagation of 1D hypothesis - // NOTE: it is possible to re-implement Propagation using EventListener - 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 } // -------------------------- @@ -661,45 +651,7 @@ SMESH_Hypothesis::Hypothesis_Status if (!meshDS->RemoveHypothesis(_subShape, anHyp)) return SMESH_Hypothesis::HYP_OK; // nothing changes - // Serve Propagation of 1D hypothesis - // NOTE: it is possible to re-implement Propagation using EventListener - 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) { algo = dynamic_cast (anHyp); if (!algo->NeedDescretBoundary()) @@ -1051,6 +1003,7 @@ SMESH_Hypothesis::Hypothesis_Status if ( stateChange && oldAlgoState == HYP_OK ) { // hyp becomes KO DeleteOwnListeners(); + SetIsAlwaysComputed( false ); if (_subShape.ShapeType() == TopAbs_VERTEX ) { // restore default states _algoState = HYP_OK; @@ -1365,58 +1318,74 @@ bool SMESH_subMesh::ComputeStateEngine(int event) _computeState = FAILED_TO_COMPUTE; if ( !algo->NeedDescretBoundary() ) _computeError = - SMESH_ComputeError::New(COMPERR_BAD_INPUT_MESH,"Unexpected submesh",algo); + SMESH_ComputeError::New(COMPERR_BAD_INPUT_MESH, + "Unexpected computed submesh",algo); break; } } // compute - CleanDependants(); - RemoveSubMeshElementsAndNodes(); +// 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( _subShape ); + helper.SetSubShape( shape ); helper.SetElementsOnShape( true ); ret = algo->Compute(*_father, &helper ); } else { - if (!algo->NeedDescretBoundary() && !algo->OnlyUnaryInput()) { - ret = ApplyToCollection( algo, GetCollection( gen, algo ) ); - break; - } - else { - ret = algo->Compute((*_father), _subShape); + if (!algo->OnlyUnaryInput()) { + shape = GetCollection( gen, algo ); } + ret = algo->Compute((*_father), shape); } if ( !ret ) _computeError = algo->GetComputeError(); } - catch (Standard_Failure& exc) { + 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 = exc.GetMessageString(); + _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::bad_alloc& exc ) { - if ( _computeError ) { - _computeError->myName = COMPERR_MEMORY_PB; - _computeError->myComment = exc.what(); - } - throw exc; - } catch ( std::exception& exc ) { if ( !_computeError ) _computeError = SMESH_ComputeError::New(); _computeError->myName = COMPERR_STD_EXCEPTION; @@ -1428,28 +1397,24 @@ bool SMESH_subMesh::ComputeStateEngine(int event) else ret = false; } - if ( ret && _computeError && !_computeError->IsOK() ) { - ret = false; - } if (ret && !_alwaysComputed) { // check if anything was built ret = ( GetSubMeshDS() && ( GetSubMeshDS()->NbElements() || GetSubMeshDS()->NbNodes() )); } - if (!ret) + bool isComputeErrorSet = !CheckComputeError( algo, shape ); + if (!ret && !isComputeErrorSet) { // Set _computeError if ( !_computeError ) _computeError = SMESH_ComputeError::New(); if ( _computeError->IsOK() ) _computeError->myName = COMPERR_ALGO_FAILED; + _computeState = FAILED_TO_COMPUTE; } - else + if (ret) { _computeError.reset(); - UpdateDependantsState( SUBMESH_COMPUTED ); // send event SUBMESH_COMPUTED } - if ( !algo->NeedDescretBoundary() ) - UpdateSubMeshState( ret ? COMPUTE_OK : FAILED_TO_COMPUTE ); - CheckComputeError( algo ); + UpdateDependantsState( SUBMESH_COMPUTED ); // send event SUBMESH_COMPUTED } break; case CLEAN: @@ -1590,53 +1555,80 @@ bool SMESH_subMesh::ComputeStateEngine(int event) //======================================================================= /*! - * \brief Update compute_state by _computeError + * \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) +bool SMESH_subMesh::CheckComputeError(SMESH_Algo* theAlgo, const TopoDS_Shape& theShape) { - bool noErrors = ( !_computeError || _computeError->IsOK() ); - if ( !noErrors ) + 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 + } + } + } + } { - 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(); + // Check my state + if ( !_computeError || _computeError->IsOK() ) + { + _computeState = COMPUTE_OK; + } else - text << _computeError->myName; - if ( _computeError->myComment.size() > 0 ) - text << " \"" << _computeError->myComment << "\""; + { + 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 - cout << "Subshape vertices (first 10):" << endl; - TopTools_IndexedMapOfShape vMap; - TopExp::MapShapes( _subShape, TopAbs_VERTEX, vMap ); - for ( int iv = 1; iv <= vMap.Extent() && iv < 11; ++iv ) { - gp_Pnt P( BRep_Tool::Pnt( TopoDS::Vertex( vMap( iv ) ))); - cout << P.X() << " " << P.Y() << " " << P.Z() << " " << endl; - } + 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 ); + INFOS( text ); #endif - _computeState = FAILED_TO_COMPUTE; - } - else - { - _computeState = COMPUTE_OK; - } - // Check state of submeshes - if ( !theAlgo->NeedDescretBoundary() /*&& theAlgo->OnlyUnaryInput()*/ ) { - SMESH_subMeshIteratorPtr smIt = getDependsOnIterator(false,false); - while ( smIt->more() ) - if ( !smIt->next()->CheckComputeError( theAlgo )) - noErrors = false; + _computeState = FAILED_TO_COMPUTE; + noErrors = false; + } } return noErrors; } @@ -1788,7 +1780,6 @@ void SMESH_subMesh::RemoveSubMeshElementsAndNodes() TopoDS_Shape SMESH_subMesh::GetCollection(SMESH_Gen * theGen, SMESH_Algo* theAlgo) { MESSAGE("SMESH_subMesh::GetCollection"); - ASSERT (!theAlgo->NeedDescretBoundary()); TopoDS_Shape mainShape = _father->GetMeshDS()->ShapeToMesh(); @@ -1935,8 +1926,9 @@ void SMESH_subMesh::SetEventListener(EventListener* listener, EventListenerData* map< EventListener*, EventListenerData* >::iterator l_d = myEventListeners.find( listener ); if ( l_d != myEventListeners.end() ) { - if ( l_d->second && l_d->second->IsDeletable() ) - delete l_d->second; + EventListenerData* curData = l_d->second; + if ( curData && curData != data && curData->IsDeletable() ) + delete curData; l_d->second = data; } else @@ -2037,13 +2029,17 @@ void SMESH_subMeshEventListener::ProcessEvent(const int event, eventType == SMESH_subMesh::COMPUTE_EVENT) { ASSERT( data->mySubMeshes.front() != subMesh ); + list::iterator smIt = data->mySubMeshes.begin(); + list::iterator smEnd = data->mySubMeshes.end(); switch ( event ) { case SMESH_subMesh::CLEAN: - data->mySubMeshes.front()->ComputeStateEngine( event ); + for ( ; smIt != smEnd; ++ smIt) + (*smIt)->ComputeStateEngine( event ); break; case SMESH_subMesh::COMPUTE: if ( subMesh->GetComputeState() == SMESH_subMesh::COMPUTE_OK ) - data->mySubMeshes.front()->ComputeStateEngine( SMESH_subMesh::SUBMESH_COMPUTED ); + for ( ; smIt != smEnd; ++ smIt) + (*smIt)->ComputeStateEngine( SMESH_subMesh::SUBMESH_COMPUTED ); break; default:; } diff --git a/src/SMESH/SMESH_subMesh.hxx b/src/SMESH/SMESH_subMesh.hxx index 001c40203..9770d6da0 100644 --- a/src/SMESH/SMESH_subMesh.hxx +++ b/src/SMESH/SMESH_subMesh.hxx @@ -253,7 +253,7 @@ protected: * \brief Update compute_state by _computeError * \retval bool - false if there are errors */ - bool CheckComputeError(SMESH_Algo* theAlgo); + bool CheckComputeError(SMESH_Algo* theAlgo, const TopoDS_Shape& theShape=TopoDS_Shape()); /*! * \brief Return a hypothesis attached to theShape. diff --git a/src/SMESHClient/Makefile.am b/src/SMESHClient/Makefile.am index 9660c5a37..6b854e740 100644 --- a/src/SMESHClient/Makefile.am +++ b/src/SMESHClient/Makefile.am @@ -71,6 +71,8 @@ libSMESHClient_la_LDFLAGS = \ ../SMESHDS/libSMESHDS.la \ ../Controls/libSMESHControls.la \ $(KERNEL_LDFLAGS) -lSalomeLifeCycleCORBA \ + $(GEOM_LDFLAGS) -lNMTDS \ + $(MED_LDFLAGS) -lMEDWrapper_V2_2 -lMEDWrapper_V2_1 \ $(CAS_KERNEL) SMESHClientBin_CPPFLAGS = \ diff --git a/src/SMESHDS/SMESHDS_Document.cxx b/src/SMESHDS/SMESHDS_Document.cxx index 87fb9a0d4..815474d55 100644 --- a/src/SMESHDS/SMESHDS_Document.cxx +++ b/src/SMESHDS/SMESHDS_Document.cxx @@ -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 : diff --git a/src/SMESHDS/SMESHDS_Group.cxx b/src/SMESHDS/SMESHDS_Group.cxx index 1955f56bf..e6b0759c1 100644 --- a/src/SMESHDS/SMESHDS_Group.cxx +++ b/src/SMESHDS/SMESHDS_Group.cxx @@ -77,6 +77,18 @@ bool SMESHDS_Group::Contains (const int theID) return false; } +//======================================================================= +//function : Contains +//purpose : +//======================================================================= + +bool SMESHDS_Group::Contains (const SMDS_MeshElement* elem) +{ + if (elem) + return myGroup.Contains(elem); + return false; +} + //============================================================================= /*! * diff --git a/src/SMESHDS/SMESHDS_Group.hxx b/src/SMESHDS/SMESHDS_Group.hxx index 2d41756a5..7f5c98c9c 100644 --- a/src/SMESHDS/SMESHDS_Group.hxx +++ b/src/SMESHDS/SMESHDS_Group.hxx @@ -51,6 +51,8 @@ class SMESHDS_EXPORT SMESHDS_Group : public SMESHDS_GroupBase virtual bool Contains (const int theID); + virtual bool Contains (const SMDS_MeshElement* elem); + virtual SMDS_ElemIteratorPtr GetElements(); bool Add (const int theID); diff --git a/src/SMESHDS/SMESHDS_GroupBase.cxx b/src/SMESHDS/SMESHDS_GroupBase.cxx index e374b723b..1fc450002 100644 --- a/src/SMESHDS/SMESHDS_GroupBase.cxx +++ b/src/SMESHDS/SMESHDS_GroupBase.cxx @@ -41,8 +41,9 @@ SMESHDS_GroupBase::SMESHDS_GroupBase (const int theID, const SMESHDS_Mesh* theMesh, const SMDSAbs_ElementType theType): myID(theID), myMesh(theMesh), myType(theType), myStoreName(""), - myCurIndex(0), myCurID(-1), myColorGroup(0) + 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) { - 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; } + +//======================================================================= +//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 ); +} + diff --git a/src/SMESHDS/SMESHDS_GroupBase.hxx b/src/SMESHDS/SMESHDS_GroupBase.hxx index 2bba90532..dc4714e8a 100644 --- a/src/SMESHDS/SMESHDS_GroupBase.hxx +++ b/src/SMESHDS/SMESHDS_GroupBase.hxx @@ -32,6 +32,8 @@ #include #include "SMDSAbs_ElementType.hxx" #include "SMDS_MeshElement.hxx" + +#include class SMESHDS_Mesh; @@ -61,6 +63,8 @@ class SMESHDS_EXPORT SMESHDS_GroupBase virtual bool Contains (const int theID); + virtual bool Contains (const SMDS_MeshElement* elem); + virtual SMDS_ElemIteratorPtr GetElements() = 0; int GetID (const int theIndex); @@ -68,11 +72,15 @@ class SMESHDS_EXPORT 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; @@ -92,7 +100,7 @@ class SMESHDS_EXPORT SMESHDS_GroupBase int myCurIndex; int myCurID; SMDS_ElemIteratorPtr myIterator; - int myColorGroup; + Quantity_Color myColor; }; #endif diff --git a/src/SMESHDS/SMESHDS_GroupOnGeom.cxx b/src/SMESHDS/SMESHDS_GroupOnGeom.cxx index ede4f0566..f7cb20d39 100644 --- a/src/SMESHDS/SMESHDS_GroupOnGeom.cxx +++ b/src/SMESHDS/SMESHDS_GroupOnGeom.cxx @@ -110,3 +110,14 @@ bool SMESHDS_GroupOnGeom::Contains (const int theID) { return mySubMesh->Contains( findInMesh( theID )); } + +//======================================================================= +//function : Contains +//purpose : +//======================================================================= + +bool SMESHDS_GroupOnGeom::Contains (const SMDS_MeshElement* elem) +{ + return mySubMesh->Contains( elem ); +} + diff --git a/src/SMESHDS/SMESHDS_GroupOnGeom.hxx b/src/SMESHDS/SMESHDS_GroupOnGeom.hxx index eaee815f8..d2c3a1dc4 100644 --- a/src/SMESHDS/SMESHDS_GroupOnGeom.hxx +++ b/src/SMESHDS/SMESHDS_GroupOnGeom.hxx @@ -47,6 +47,8 @@ class SMESHDS_EXPORT SMESHDS_GroupOnGeom: public SMESHDS_GroupBase virtual bool Contains (const int theID); + virtual bool Contains (const SMDS_MeshElement* elem); + virtual SMDS_ElemIteratorPtr GetElements(); private: diff --git a/src/SMESHDS/SMESHDS_Mesh.cxx b/src/SMESHDS/SMESHDS_Mesh.cxx index 9f48b7b15..18b13fc5d 100644 --- a/src/SMESHDS/SMESHDS_Mesh.cxx +++ b/src/SMESHDS/SMESHDS_Mesh.cxx @@ -32,7 +32,9 @@ #include "SMDS_VertexPosition.hxx" #include "SMDS_EdgePosition.hxx" #include "SMDS_FacePosition.hxx" +#include "SMDS_SpacePosition.hxx" #include "SMESHDS_GroupOnGeom.hxx" + #include #include #include @@ -850,6 +852,22 @@ bool SMESHDS_Mesh::add(const SMDS_MeshElement* elem, SMESHDS_SubMesh* subMesh ) 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 : @@ -858,7 +876,7 @@ void SMESHDS_Mesh::SetNodeInVolume(SMDS_MeshNode * aNode, const TopoDS_Shell & S) { if ( add( aNode, getSubmesh(S) )) - const_cast( aNode->GetPosition().get() )->SetShapeId( myCurSubID ); + aNode->SetPosition ( volumePosition( myCurSubID )); } //======================================================================= //function : SetNodeOnVolume @@ -868,7 +886,7 @@ void SMESHDS_Mesh::SetNodeInVolume(SMDS_MeshNode * aNode, const TopoDS_Solid & S) { if ( add( aNode, getSubmesh(S) )) - const_cast( aNode->GetPosition().get() )->SetShapeId( myCurSubID ); + aNode->SetPosition ( volumePosition( myCurSubID )); } //======================================================================= @@ -1154,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 ))) - const_cast( aNode->GetPosition().get() )->SetShapeId( Index ); + ((SMDS_MeshNode*) aNode)->SetPosition( volumePosition( Index )); } //======================================================================= @@ -1202,13 +1220,21 @@ void SMESHDS_Mesh::SetMeshElementOnShape(const SMDS_MeshElement* anElement, add( anElement, getSubmesh( Index )); } +//======================================================================= +//function : ~SMESHDS_Mesh +//purpose : +//======================================================================= SMESHDS_Mesh::~SMESHDS_Mesh() { + // myScript delete myScript; + // submeshes + TShapeIndexToSubMesh::iterator i_sm = myShapeIndexToSubMesh.begin(); + for ( ; i_sm != myShapeIndexToSubMesh.end(); ++i_sm ) + delete i_sm->second; } - //******************************************************************** //******************************************************************** //******** ********* diff --git a/src/SMESHDS/SMESHDS_SubMesh.cxx b/src/SMESHDS/SMESHDS_SubMesh.cxx index 262649e86..7cc19700d 100644 --- a/src/SMESHDS/SMESHDS_SubMesh.cxx +++ b/src/SMESHDS/SMESHDS_SubMesh.cxx @@ -29,6 +29,7 @@ #include "SMESHDS_SubMesh.hxx" #include "utilities.h" +#include "SMDS_SetIterator.hxx" using namespace std; @@ -297,3 +298,16 @@ bool SMESHDS_SubMesh::ContainsSubMesh( const SMESHDS_SubMesh* theSubMesh ) const { return mySubMeshes.find( theSubMesh ) != mySubMeshes.end(); } + +//======================================================================= +//function : GetSubMeshIterator +//purpose : +//======================================================================= + +SMESHDS_SubMeshIteratorPtr SMESHDS_SubMesh::GetSubMeshIterator() const +{ + typedef set::const_iterator TIterator; + return SMESHDS_SubMeshIteratorPtr + ( new SMDS_SetIterator< const SMESHDS_SubMesh*, TIterator >( mySubMeshes.begin(), + mySubMeshes.end())); +} diff --git a/src/SMESHDS/SMESHDS_SubMesh.hxx b/src/SMESHDS/SMESHDS_SubMesh.hxx index 1231c490c..bc0ccce2a 100644 --- a/src/SMESHDS/SMESHDS_SubMesh.hxx +++ b/src/SMESHDS/SMESHDS_SubMesh.hxx @@ -32,6 +32,10 @@ #include "SMDS_Mesh.hxx" #include +class SMESHDS_SubMesh; +typedef SMDS_Iterator SMESHDS_SubMeshIterator; +typedef boost::shared_ptr< SMESHDS_SubMeshIterator > SMESHDS_SubMeshIteratorPtr; + class SMESHDS_EXPORT SMESHDS_SubMesh { public: @@ -48,6 +52,8 @@ class SMESHDS_EXPORT SMESHDS_SubMesh 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; diff --git a/src/SMESHDS/SMESH_SMESHDS.hxx b/src/SMESHDS/SMESH_SMESHDS.hxx index fdef18da9..6747798ef 100755 --- a/src/SMESHDS/SMESH_SMESHDS.hxx +++ b/src/SMESHDS/SMESH_SMESHDS.hxx @@ -36,4 +36,4 @@ #define SMESHDS_EXPORT #endif -#endif \ No newline at end of file +#endif diff --git a/src/SMESHFiltersSelection/Makefile.am b/src/SMESHFiltersSelection/Makefile.am index 9d5d0ba93..c2131e8f8 100644 --- a/src/SMESHFiltersSelection/Makefile.am +++ b/src/SMESHFiltersSelection/Makefile.am @@ -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 # -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # # # @@ -48,14 +48,15 @@ dist_libSMESHFiltersSelection_la_SOURCES = \ # additionnal information to compil and link file libSMESHFiltersSelection_la_CPPFLAGS = \ - $(KERNEL_CXXFLAGS) \ - $(GUI_CXXFLAGS) \ - $(GEOM_CXXFLAGS) \ $(CAS_CPPFLAGS) \ $(QT_INCLUDES) \ $(PYTHON_INCLUDES) \ $(VTK_INCLUDES) \ - ${BOOST_CPPFLAGS} \ + $(KERNEL_CXXFLAGS) \ + $(GUI_CXXFLAGS) \ + $(GEOM_CXXFLAGS) \ + $(MED_CXXFLAGS) \ + $(BOOST_CPPFLAGS) \ $(CORBA_CXXFLAGS) \ $(CORBA_INCLUDES) \ -I$(top_builddir)/idl \ diff --git a/src/SMESHFiltersSelection/SMESH_NumberFilter.cxx b/src/SMESHFiltersSelection/SMESH_NumberFilter.cxx index 61162a581..36a091c72 100644 --- a/src/SMESHFiltersSelection/SMESH_NumberFilter.cxx +++ b/src/SMESHFiltersSelection/SMESH_NumberFilter.cxx @@ -35,8 +35,9 @@ #include "SALOMEDSClient_SObject.hxx" #include "SALOMEDS_SObject.hxx" -#include #include +#include +#include /*! * Class : SMESH_NumberFilter @@ -135,12 +136,13 @@ bool SMESH_NumberFilter::isOk (const SUIT_DataOwner* theDataOwner) const 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? } //======================================================================= diff --git a/src/SMESHFiltersSelection/SMESH_NumberFilter.hxx b/src/SMESHFiltersSelection/SMESH_NumberFilter.hxx index badf44006..479525bc4 100644 --- a/src/SMESHFiltersSelection/SMESH_NumberFilter.hxx +++ b/src/SMESHFiltersSelection/SMESH_NumberFilter.hxx @@ -43,8 +43,9 @@ class SUIT_DataOwner; * 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 diff --git a/src/SMESHFiltersSelection/SMESH_TypeFilter.cxx b/src/SMESHFiltersSelection/SMESH_TypeFilter.cxx index 1b2d9ee29..3770b4a85 100644 --- a/src/SMESHFiltersSelection/SMESH_TypeFilter.cxx +++ b/src/SMESHFiltersSelection/SMESH_TypeFilter.cxx @@ -11,12 +11,13 @@ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // -// 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 // + #include "SMESH_TypeFilter.hxx" #include @@ -24,12 +25,15 @@ #include #include -SMESH_TypeFilter::SMESH_TypeFilter (MeshObjectType theType) +#include +#include CORBA_CLIENT_HEADER(SMESH_Gen) + +SMESH_TypeFilter::SMESH_TypeFilter (MeshObjectType 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) - { + { case HYPOTHESIS: { - if ( aLevel == 2 && ( objFather->Tag() == 1 )) // hypo definition + if (aLevel == 2 && (objFather->Tag() == SMESH::Tag_HypothesisRoot)) + // hypo definition 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; - 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: { - if ( aLevel == 2 && ( objFather->Tag() == 2 )) // algo definition + if (aLevel == 2 && (objFather->Tag() == SMESH::Tag_AlgorithmsRoot)) + // algo definition 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; - 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: { - 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 - 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: { - if ( aLevel == 1 && ( obj->Tag() >= 3 )) + if (aLevel == 1 && (obj->Tag() >= SMESH::Tag_FirstMeshRoot)) 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; } - 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: { - if ( aLevel == 3 && ( objFather->Tag() == 5 )) + if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_SubMeshOnEdge)) 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: { - if ( aLevel == 3 && ( objFather->Tag() == 9 )) + if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_SubMeshOnSolid)) 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: { - if ( aLevel == 3 && ( objFather->Tag() > 10 )) + if (aLevel == 3 && (objFather->Tag() >= SMESH::Tag_FirstGroup)) Ok = true; break; } - } + } } return Ok; } -MeshObjectType SMESH_TypeFilter::type() const +MeshObjectType SMESH_TypeFilter::type() const { return myType; } diff --git a/src/SMESHGUI/Makefile.am b/src/SMESHGUI/Makefile.am index 7bb9d1e0e..e56d1e567 100644 --- a/src/SMESHGUI/Makefile.am +++ b/src/SMESHGUI/Makefile.am @@ -58,6 +58,7 @@ dist_libSMESH_la_SOURCES = \ SMESHGUI_RemoveElementsDlg.cxx \ SMESHGUI_MeshInfosDlg.cxx \ SMESHGUI_StandardMeshInfosDlg.cxx \ + SMESHGUI_WhatIsDlg.cxx \ SMESHGUI_Preferences_ColorDlg.cxx \ SMESHGUI_Preferences_ScalarBarDlg.cxx \ SMESHGUI_Preferences_SelectionDlg.cxx \ @@ -123,6 +124,7 @@ MOC_FILES = \ 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 \ diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 89ce6fe7a..63ad64e37 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -35,6 +35,7 @@ #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" @@ -146,6 +147,8 @@ #include "SALOMEDSClient_StudyBuilder.hxx" #include "SALOMEDSClient_SComponent.hxx" +#include + using namespace std; //namespace{ @@ -275,9 +278,11 @@ using namespace std; 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: @@ -308,7 +313,7 @@ using namespace std; there must be check on others mesh elements not equal triangles */ if (aMesh->NbTriangles() < 1) { - int aRet = SUIT_MessageBox::warn1 + SUIT_MessageBox::warn1 (SMESHGUI::desktop(), QObject::tr("SMESH_WRN_WARNING"), QObject::tr("SMESH_EXPORT_STL1").arg(anIObject->getName()), @@ -500,12 +505,88 @@ using namespace std; } } - 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( 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(anIObject); + if( aMainObject->_is_nil() ) + return; + + aMainObject->SetAutoColor( true ); + + QValueList 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 ); + if(selected.Extent()){ + Handle(SALOME_InteractiveObject) anIObject = selected.First(); + SMESH::SMESH_Mesh_var aMesh = SMESH::IObjectToInterface(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( app->activeStudy() ); + if( !aSel || !appStudy ) + return; + + _PTR(Study) aStudy = appStudy->studyDS(); + + aSel->selectedObjects( selected ); + if(selected.Extent() >= 1){ switch(theCommandID){ case 1134:{ @@ -611,6 +692,16 @@ using namespace std; vtkFloatingPointType (nodecolor.blue()) / 255.); anActor->SetNodeSize(aDlg->GetIntValue(2)); + SMESH::SMESH_GroupBase_var aGroupObject = SMESH::IObjectToInterface(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; @@ -1237,6 +1328,15 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } + // Auto-color + case 1136: + ::AutoColor(); + break; + + case 1137: + ::DisableAutoColor(); + break; + case 1134: // Clipping case 1133: // Tranparency case 1132: // Colors / Size @@ -1260,7 +1360,18 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) 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(); @@ -1290,22 +1401,31 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) 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) /*&& !automaticUpdate()*/ ) - SMESH::UpdateView(); - // PAL13338 + PAL15161 <-- + // 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) { SALOME_ListIO l1; @@ -1364,82 +1484,6 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if (checkLock(aStudy)) break; startOperation( 701 ); -// 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")); -// 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(aMeshSObj); -// aSubMesh = SMESH::SObjectToInterface(aMeshSObj); -// if ( !aSubMesh->_is_nil() ) -// aMesh = aSubMesh->GetFather(); - -// if (!aMesh->_is_nil()) { -// 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); -// } - -// updateObjBrowser(); - -// if (automaticUpdate()) { -// SVTK_ViewWindow* aVTKView = SMESH::GetViewWindow(this, /*create*/true); -// if (aVTKView) { -// CORBA::Long anId = aStudy->StudyId(); -// TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId, IObject->getEntry()); -// if (aVisualObj) { -// aVisualObj->Update(); -// SMESH_Actor* anActor = SMESH::FindActorByEntry(IObject->getEntry()); -// if (!anActor) { -// anActor = SMESH::CreateActor(aStudy, IObject->getEntry()); -// if (anActor) { -// SMESH::DisplayActor(aVTKView, anActor); //apo -// SMESH::FitAll(); -// } -// } -// SMESH::RepaintCurrentView(); -// Sel->setSelectedObjects( selected ); -// } -// } -// } -// } -// } -// } } break; @@ -1845,6 +1889,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } + case 903: // WHAT IS + { + EmitSignalDeactivateDialog(); + new SMESHGUI_WhatIsDlg( this, "", false); + break; + } + case 1100: // EDIT HYPOTHESIS { if(checkLock(aStudy)) break; @@ -1857,17 +1908,18 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) int nbSel = selected.Extent(); if (nbSel == 1) { - SMESH::SMESH_Hypothesis_var Hyp = SMESH::IObjectToInterface(selected.First()); + Handle(SALOME_InteractiveObject) anIObject = selected.First(); + SMESH::SMESH_Hypothesis_var aHypothesis = SMESH::IObjectToInterface(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 ! */ - 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) - aCreator->edit( Hyp.in(), desktop() ); + aCreator->edit( aHypothesis.in(), anIObject->getName(), desktop() ); else { // report error @@ -2409,7 +2461,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( 125, "EXPORT_MED" ); createSMESHAction( 126, "EXPORT_UNV" ); createSMESHAction( 141, "EXPORT_STL" ); - createSMESHAction( 33, "DELETE", "ICON_DELETE" ); + 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" ); @@ -2427,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( 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 ); @@ -2483,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( 1101, "RENAME" ); + createSMESHAction( 1101, "RENAME", "", Key_F2 ); createSMESHAction( 1102, "UNASSIGN" ); createSMESHAction( 9010, "NUM_NODES", "", 0, true ); createSMESHAction( 9011, "NUM_ELEMENTS", "", 0, true ); @@ -2492,6 +2545,8 @@ void SMESHGUI::initialize( CAM_Application* app ) 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" ); @@ -2558,6 +2613,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( separator(), meshId, -1 ); createMenu( 900, meshId, -1 ); createMenu( 902, meshId, -1 ); + createMenu( 903, meshId, -1 ); createMenu( separator(), meshId, -1 ); createMenu( 6003, ctrlId, -1 ); @@ -2644,6 +2700,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( separator(), meshTb ); createTool( 900, meshTb ); createTool( 902, meshTb ); + createTool( 903, meshTb ); createTool( separator(), meshTb ); createTool( 6001, ctrlTb ); @@ -2741,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( 903, OB, mesh_group ); // WHAT_IS popupMgr()->insert( separator(), -1, 0 ); createPopupItem( 801, OB, mesh ); // CREATE_GROUP createPopupItem( 802, OB, subMesh ); // CONSTRUCT_GROUP @@ -2751,10 +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() ); - 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( 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 @@ -2765,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( 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; @@ -2787,6 +2851,10 @@ void SMESHGUI::initialize( CAM_Application* app ) 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 //------------------------------------------------- @@ -2954,10 +3022,6 @@ void SMESHGUI::initialize( CAM_Application* app ) //------------------------------------------------- // 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 @@ -3005,6 +3069,12 @@ bool SMESHGUI::deactivateModule( SUIT_Study* 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(); @@ -3097,7 +3167,7 @@ void SMESHGUI::createPreferences() int exportgroup = addPreference( tr( "PREF_GROUP_EXPORT" ), genTab ); addPreference( tr( "PREF_AUTO_GROUPS" ), exportgroup, LightApp_Preferences::Bool, "SMESH", "auto_groups" ); - int renumber=addPreference( tr( "PREF_RENUMBER" ), exportgroup, LightApp_Preferences::Bool, "SMESH", "renumbering" ); + 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 ); @@ -3147,6 +3217,7 @@ 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_OBJECTS" ), precSelGroup, LightApp_Preferences::Double, "SMESH", "selection_precision_object" ); int sbarTab = addPreference( tr( "SMESH_SCALARBAR" ) ); int fontGr = addPreference( tr( "SMESH_FONT_SCALARBAR" ), sbarTab ); @@ -3237,7 +3308,8 @@ void SMESHGUI::preferencesChanged( const QString& sect, const QString& name ) SUIT_ResourceMgr* aResourceMgr = SMESH::GetResourceMgr(this); if( name=="selection_object_color" || name=="selection_element_color" || 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); @@ -3403,3 +3475,60 @@ LightApp_Displayer* SMESHGUI::displayer() return myDisplayer; } +SALOMEDS::Color SMESHGUI::getUniqueColor( const QValueList& 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::const_iterator it = theReservedColors.constBegin(); + QValueList::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; +} diff --git a/src/SMESHGUI/SMESHGUI.h b/src/SMESHGUI/SMESHGUI.h index 7dbab6471..33ced9a76 100644 --- a/src/SMESHGUI/SMESHGUI.h +++ b/src/SMESHGUI/SMESHGUI.h @@ -109,9 +109,12 @@ public : virtual void update( const int ); + static SALOMEDS::Color getUniqueColor( const QValueList& ); + public slots: virtual bool deactivateModule( SUIT_Study* ); virtual bool activateModule( SUIT_Study* ); + virtual void studyClosed( SUIT_Study* ); private slots: void OnGUIEvent(); diff --git a/src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx b/src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx index 854c25a94..3d7781319 100644 --- a/src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx @@ -249,32 +249,32 @@ SMESHGUI_AddMeshElementDlg::SMESHGUI_AddMeshElementDlg( SMESHGUI* theModule, 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"; - 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"; - myHelpFileName = "/files/adding_nodes_and_elements.htm#Adding_quadrangles"; + myHelpFileName = "adding_nodes_and_elements_page.html#adding_quadrangles_anchor"; } 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"; - 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; - myHelpFileName = "/files/adding_nodes_and_elements.htm#Adding_polygons"; + myHelpFileName = "adding_nodes_and_elements_page.html#adding_polygons_anchor"; } 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)); diff --git a/src/SMESHGUI/SMESHGUI_AddQuadraticElementDlg.cxx b/src/SMESHGUI/SMESHGUI_AddQuadraticElementDlg.cxx index 82a3728a2..1f1e5bd14 100644 --- a/src/SMESHGUI/SMESHGUI_AddQuadraticElementDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_AddQuadraticElementDlg.cxx @@ -498,37 +498,37 @@ void SMESHGUI_AddQuadraticElementDlg::Init() 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; - 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; - 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; - 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; - 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; - 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; - myHelpFileName = "/adding_quadratic_nodes_and_elements.htm#?"; //Adding_hexahedrons + myHelpFileName = "adding_quadratic_elements_page.html#?"; //Adding_hexahedrons break; } diff --git a/src/SMESHGUI/SMESHGUI_BuildCompoundDlg.cxx b/src/SMESHGUI/SMESHGUI_BuildCompoundDlg.cxx index 32160647c..781959abb 100644 --- a/src/SMESHGUI/SMESHGUI_BuildCompoundDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_BuildCompoundDlg.cxx @@ -196,7 +196,7 @@ SMESHGUI_BuildCompoundDlg::SMESHGUI_BuildCompoundDlg( SMESHGUI* theModule) GroupButtonsLayout->addWidget(buttonOk, 0, 0); SMESHGUI_BuildCompoundDlgLayout->addWidget(GroupButtons, 3, 0); - myHelpFileName = "building_compounds.htm"; + myHelpFileName = "building_compounds_page.html"; Init(); // Initialisations } diff --git a/src/SMESHGUI/SMESHGUI_ClippingDlg.cxx b/src/SMESHGUI/SMESHGUI_ClippingDlg.cxx index 8a30f65e1..a35b10388 100644 --- a/src/SMESHGUI/SMESHGUI_ClippingDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_ClippingDlg.cxx @@ -350,7 +350,7 @@ SMESHGUI_ClippingDlg::SMESHGUI_ClippingDlg (SMESHGUI* theModule, myIsSelectPlane = false; onSelectionChanged(); - myHelpFileName = "clipping.htm"; + myHelpFileName = "clipping_page.html"; // signals and slots connections : connect(ComboBoxPlanes, SIGNAL(activated(int)), this, SLOT(onSelectPlane(int))); diff --git a/src/SMESHGUI/SMESHGUI_ComputeDlg.cxx b/src/SMESHGUI/SMESHGUI_ComputeDlg.cxx index 5ce986876..51d62037b 100644 --- a/src/SMESHGUI/SMESHGUI_ComputeDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_ComputeDlg.cxx @@ -35,6 +35,7 @@ #include "SMESHGUI_HypothesesUtils.h" #include "SMDS_SetIterator.hxx" +#include #include "GEOMBase.h" #include "GEOM_Actor.h" @@ -67,6 +68,8 @@ #include #include +#include + // QT Includes #include #include @@ -77,6 +80,7 @@ #include #include #include +#include #include @@ -109,6 +113,21 @@ 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 @@ -312,7 +331,7 @@ namespace SMESH { CASE2TEXT( COMPERR_BAD_INPUT_MESH); CASE2TEXT( COMPERR_STD_EXCEPTION ); CASE2TEXT( COMPERR_OCC_EXCEPTION ); - CASE2TEXT( COMPERR_SLM_EXCEPTION ); + case SMESH::COMPERR_SLM_EXCEPTION: break; // avoid double "Salome exception" CASE2TEXT( COMPERR_EXCEPTION ); CASE2TEXT( COMPERR_MEMORY_PB ); CASE2TEXT( COMPERR_BAD_SHAPE ); @@ -408,7 +427,7 @@ namespace SMESH { } // ----------------------------------------------------------------------- /*! - * \brief Return text describing a subshape + * \brief Return a list of selected rows */ bool getSelectedRows(QTable* table, list< int > & rows) { @@ -421,6 +440,9 @@ namespace SMESH { 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(); } @@ -573,7 +595,7 @@ void SMESHGUI_MeshInfosBox::SetInfoByMesh(SMESH::SMESH_Mesh_var mesh) // faces nbTot = mesh->NbFaces(), nbLin = mesh->NbFacesOfOrder(lin); myNbFace ->setText( QString("%1").arg( nbTot )); - myNbLinFace ->setText( QString("%1").arg( nbLin )); + myNbLinFace ->setText( QString("%1").arg( nbLin )); myNbQuadFace ->setText( QString("%1").arg( nbTot - nbLin )); // volumes @@ -671,12 +693,12 @@ QFrame* SMESHGUI_ComputeDlg::createMainFrame (QWidget* theParent) myBriefInfo = new SMESHGUI_MeshInfosBox(false, aFrame); myFullInfo = new SMESHGUI_MeshInfosBox(true, aFrame); - // errors + // Computation errors - myErrorGroup = new QGroupBox(tr("ERRORS"), aFrame, "errorGrBox"); - myTable = new QTable( 1, NB_COLUMNS, myErrorGroup, "myTable"); - myShowBtn = new QPushButton(tr("SHOW_SHAPE"), myErrorGroup, "myShowBtn"); - myPublishBtn = new QPushButton(tr("PUBLISH_SHAPE"), myErrorGroup, "myPublishBtn"); + 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 ); @@ -693,11 +715,11 @@ QFrame* SMESHGUI_ComputeDlg::createMainFrame (QWidget* theParent) } myTable->horizontalHeader()->setLabel( col, header ); } - - myErrorGroup->setColumnLayout(0, Qt::Vertical); - myErrorGroup->layout()->setSpacing(0); - myErrorGroup->layout()->setMargin(0); - QGridLayout* grpLayout = new QGridLayout(myErrorGroup->layout()); + // 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); @@ -706,13 +728,31 @@ QFrame* SMESHGUI_ComputeDlg::createMainFrame (QWidget* theParent) 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( myErrorGroup ); - aLay->setStretchFactor( myErrorGroup, 1 ); + aLay->addWidget( myHypErrorGroup ); + aLay->addWidget( myCompErrorGroup ); + aLay->addWidget( myMemoryLackGroup ); + aLay->setStretchFactor( myCompErrorGroup, 1 ); + + ((QPushButton*) button( OK ))->setDefault( true ); return aFrame; } @@ -727,12 +767,14 @@ SMESHGUI_ComputeOp::SMESHGUI_ComputeOp() { myDlg = new SMESHGUI_ComputeDlg; myTShapeDisplayer = new TShapeDisplayer(); - myHelpFileName = "/files/about_meshes.htm"; + //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())); } //======================================================================= @@ -744,16 +786,11 @@ void SMESHGUI_ComputeOp::startOperation() { SMESHGUI_Operation::startOperation(); - SMESH::SMESH_Mesh_var aMesh; - SMESH::compute_error_array_var anErrors; + // check selection + SMESH::SMESH_Mesh_var aMesh; myMainShape = GEOM::GEOM_Object::_nil(); - // COMPUTE MESH - - bool computeFailed = true; - int nbNodes = 0, nbEdges = 0, nbFaces = 0, nbVolums = 0; - LightApp_SelectionMgr *Sel = selectionMgr(); SALOME_ListIO selected; Sel->selectedObjects( selected ); @@ -769,69 +806,7 @@ void SMESHGUI_ComputeOp::startOperation() Handle(SALOME_InteractiveObject) IObject = selected.First(); aMesh = SMESH::GetMeshByIO(IObject); - if (!aMesh->_is_nil()) { - myMainShape = aMesh->GetShapeToMesh(); - if ( !myMainShape->_is_nil() ) { - SMESH::SMESH_Gen_var gen = getSMESHGUI()->GetSMESHGen(); - SMESH::algo_error_array_var errors = gen->GetAlgoState(aMesh,myMainShape); - if ( errors->length() > 0 ) { - SUIT_MessageBox::warn1(desktop(), tr("SMESH_WRN_WARNING"), - SMESH::GetMessageOnAlgoStateErrors( errors.in() ), - tr("SMESH_BUT_OK")); - onCancel(); - return; - } - SUIT_OverrideCursor aWaitCursor; - try { - if (gen->Compute(aMesh, myMainShape)) { - computeFailed = false; - } - else { - anErrors = gen->GetComputeErrors( aMesh, myMainShape ); -// if ( anErrors->length() == 0 ) { -// SUIT_MessageBox::warn1(desktop(), -// tr("SMESH_WRN_WARNING"), -// tr("SMESH_WRN_COMPUTE_FAILED"), -// tr("SMESH_BUT_OK")); -// onCancel(); -// return; -// } - } - } - catch(const SALOME::SALOME_Exception & S_ex){ - SalomeApp_Tools::QtCatchCorbaException(S_ex); - } - if ( _PTR(SObject) aMeshSObj = SMESH::FindSObject(aMesh)) { - myDlg->myMeshName->setText( aMeshSObj->GetName() ); - SMESH::ModifiedMesh(aMeshSObj, !computeFailed, aMesh->NbNodes() == 0); - } - update( UF_ObjBrowser | UF_Model ); - - // SHOW MESH - - if ( getSMESHGUI()->automaticUpdate() ) { - SVTK_ViewWindow* aVTKView = SMESH::GetViewWindow(getSMESHGUI(), true); - if (aVTKView) { - int anId = study()->id(); - TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId, IObject->getEntry()); - if (aVisualObj) { - aVisualObj->Update(); - SMESH_Actor* anActor = SMESH::FindActorByEntry(IObject->getEntry()); - if (!anActor) { - anActor = SMESH::CreateActor(studyDS(), IObject->getEntry()); - if (anActor) { - SMESH::DisplayActor(aVTKView, anActor); //apo - SMESH::FitAll(); - } - } - SMESH::RepaintCurrentView(); - Sel->setSelectedObjects( selected ); - } - } - } - } - } - else { + if (aMesh->_is_nil()) { SUIT_MessageBox::warn1(desktop(), tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_NO_AVAILABLE_DATA"), @@ -840,59 +815,164 @@ void SMESHGUI_ComputeOp::startOperation() 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 noError = ( !anErrors.operator->() || anErrors->length() == 0 ); + bool noCompError = ( !aCompErrors.operator->() || aCompErrors->length() == 0 ); + bool noHypoError = ( aHypErrors.isEmpty() ); - QTable* tbl = myDlg->myTable; - - if ( noError ) + if ( memoryLack ) + { + myDlg->myMemoryLackGroup->show(); + myDlg->myFullInfo->hide(); + myDlg->myBriefInfo->hide(); + myDlg->myHypErrorGroup->hide(); + myDlg->myCompErrorGroup->hide(); + } + else if ( noCompError && noHypoError ) { - //tbl->setNumRows(0); myDlg->myFullInfo->SetInfoByMesh( aMesh ); myDlg->myFullInfo->show(); myDlg->myBriefInfo->hide(); - myDlg->myErrorGroup->hide(); + myDlg->myHypErrorGroup->hide(); + myDlg->myCompErrorGroup->hide(); } else { + QTable* tbl = myDlg->myTable; myDlg->myBriefInfo->SetInfoByMesh( aMesh ); myDlg->myBriefInfo->show(); myDlg->myFullInfo->hide(); - myDlg->myErrorGroup->show(); - // fill table of errors - tbl->setNumRows( anErrors->length() ); - bool hasShape = aMesh->HasShapeToMesh(); - if ( !hasShape ) tbl->hideColumn( COL_SHAPE ); - else tbl->showColumn( COL_SHAPE ); - tbl->setColumnWidth( COL_ERROR, 200 ); + if ( noHypoError ) { + myDlg->myHypErrorGroup->hide(); + } + else { + myDlg->myHypErrorGroup->show(); + myDlg->myHypErrorLabel->setText( aHypErrors ); + } + + if ( noCompError ) { + myDlg->myCompErrorGroup->hide(); + } + else { + myDlg->myCompErrorGroup->show(); - for ( int row = 0; row < anErrors->length(); ++row ) - { - SMESH::ComputeError & err = anErrors[ 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 )); + if ( !hasShape ) { + myDlg->myPublishBtn->hide(); + myDlg->myShowBtn->hide(); + } + else { + myDlg->myPublishBtn->show(); + myDlg->myShowBtn->show(); + } - QString text = hasShape ? shapeText( err.subShapeID, myMainShape ) : QString(""); - tbl->setText( row, COL_SHAPE, text ); + // fill table of errors + tbl->setNumRows( aCompErrors->length() ); + if ( !hasShape ) tbl->hideColumn( COL_SHAPE ); + else tbl->showColumn( COL_SHAPE ); + tbl->setColumnWidth( COL_ERROR, 200 ); - text = ( !hasShape || getSubShapeSO( err.subShapeID, myMainShape )) ? "PUBLISHED" : ""; - tbl->setText( row, COL_PUBLISHED, text ); // if text=="", "PUBLISH" button enabled + 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 )); - tbl->item( row, COL_ERROR )->setWordWrap( TRUE ); - tbl->adjustRow( row ); - } - tbl->adjustColumn( COL_ALGO ); - tbl->adjustColumn( COL_SHAPE ); + QString text = hasShape ? shapeText( err.subShapeID, myMainShape ) : QString(""); + tbl->setText( row, COL_SHAPE, text ); - tbl->setCurrentCell(0,0); - currentCellChanged(); // to update buttons - } + 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(); } diff --git a/src/SMESHGUI/SMESHGUI_ComputeDlg.h b/src/SMESHGUI/SMESHGUI_ComputeDlg.h index bb4252475..5ea7a662b 100644 --- a/src/SMESHGUI/SMESHGUI_ComputeDlg.h +++ b/src/SMESHGUI/SMESHGUI_ComputeDlg.h @@ -130,7 +130,10 @@ private: QFrame* createMainFrame (QWidget*); QLabel* myMeshName; - QGroupBox* myErrorGroup; + QGroupBox* myMemoryLackGroup; + QGroupBox* myCompErrorGroup; + QGroupBox* myHypErrorGroup; + QLabel* myHypErrorLabel; QTable* myTable; QPushButton* myShowBtn; QPushButton* myPublishBtn; diff --git a/src/SMESHGUI/SMESHGUI_ConvToQuadOp.cxx b/src/SMESHGUI/SMESHGUI_ConvToQuadOp.cxx index 92853de16..fc4711bf7 100644 --- a/src/SMESHGUI/SMESHGUI_ConvToQuadOp.cxx +++ b/src/SMESHGUI/SMESHGUI_ConvToQuadOp.cxx @@ -95,7 +95,7 @@ void SMESHGUI_ConvToQuadOp::startOperation() } connect( myDlg, SIGNAL( onClicked( int ) ), SLOT( ConnectRadioButtons( int ) ) ); - myHelpFileName = "/files/convert_to_from_quadratic.htm"; + myHelpFileName = "convert_to_from_quadratic_mesh_page.html"; SMESHGUI_SelectionOp::startOperation(); diff --git a/src/SMESHGUI/SMESHGUI_CreatePatternDlg.cxx b/src/SMESHGUI/SMESHGUI_CreatePatternDlg.cxx index 655415bdd..8ea75e530 100755 --- a/src/SMESHGUI/SMESHGUI_CreatePatternDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_CreatePatternDlg.cxx @@ -108,7 +108,7 @@ SMESHGUI_CreatePatternDlg::SMESHGUI_CreatePatternDlg( SMESHGUI* theModule, if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) mySelector = aViewWindow->GetSelector(); - myHelpFileName = "pattern_mapping.htm"; + myHelpFileName = "pattern_mapping_page.html"; Init(theType); } diff --git a/src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx b/src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx index 5f3e42beb..8e1e55c69 100644 --- a/src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx @@ -325,7 +325,7 @@ SMESHGUI_CreatePolyhedralVolumeDlg::SMESHGUI_CreatePolyhedralVolumeDlg( SMESHGUI mySMESHGUI->SetActiveDialogBox( (QDialog*)this ) ; - myHelpFileName = "/files/adding_nodes_and_elements.htm#Adding_polyhedrons"; + myHelpFileName = "adding_nodes_and_elements_page.html#adding_polyhedrons_anchor"; Init(); } diff --git a/src/SMESHGUI/SMESHGUI_DeleteGroupDlg.cxx b/src/SMESHGUI/SMESHGUI_DeleteGroupDlg.cxx index f298ef6c2..59ea87705 100644 --- a/src/SMESHGUI/SMESHGUI_DeleteGroupDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_DeleteGroupDlg.cxx @@ -93,7 +93,7 @@ SMESHGUI_DeleteGroupDlg::SMESHGUI_DeleteGroupDlg (SMESHGUI* theModule): aDlgLay->setStretchFactor(aMainFrame, 1); - myHelpFileName = "deleting_groups.htm"; + myHelpFileName = "deleting_groups_page.html"; Init(); } diff --git a/src/SMESHGUI/SMESHGUI_EditMeshDlg.cxx b/src/SMESHGUI/SMESHGUI_EditMeshDlg.cxx index 696305db0..c53ac988a 100644 --- a/src/SMESHGUI/SMESHGUI_EditMeshDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_EditMeshDlg.cxx @@ -567,7 +567,7 @@ void SMESHGUI_EditMeshDlg::Init() GroupCoincident->setTitle(tr("COINCIDENT_ELEMENTS")); } - myHelpFileName = "merge_elements.htm"; + myHelpFileName = "merging_elements_page.html"; } //================================================================================= diff --git a/src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.cxx b/src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.cxx index da79f4aca..bd1f3bb6c 100644 --- a/src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.cxx @@ -270,6 +270,10 @@ SMESHGUI_ExtrusionAlongPathDlg::SMESHGUI_ExtrusionAlongPathDlg( SMESHGUI* theMod 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 ); @@ -280,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(MakeGroupsCheck, 7, 7, 0, 2); GroupArgumentsLayout->setRowStretch(6, 10); /***************************************************************/ @@ -341,7 +346,7 @@ SMESHGUI_ExtrusionAlongPathDlg::SMESHGUI_ExtrusionAlongPathDlg( SMESHGUI* theMod 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(); @@ -599,10 +604,18 @@ bool SMESHGUI_ExtrusionAlongPathDlg::ClickOnApply() 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(); @@ -652,6 +665,8 @@ bool SMESHGUI_ExtrusionAlongPathDlg::ClickOnApply() //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()); @@ -825,6 +840,14 @@ void SMESHGUI_ExtrusionAlongPathDlg::SelectionIntoArgument() 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) diff --git a/src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.h b/src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.h index 6f0ca271b..c0b5b898f 100644 --- a/src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.h +++ b/src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.h @@ -141,6 +141,7 @@ private: SMESHGUI_SpinBox* YSpin; QLabel* ZLab; SMESHGUI_SpinBox* ZSpin; + QCheckBox* MakeGroupsCheck; QGroupBox* GroupButtons; QPushButton* OkButton; diff --git a/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx b/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx index aa7779d0f..c41837b8c 100644 --- a/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx @@ -225,6 +225,12 @@ SMESHGUI_ExtrusionDlg::SMESHGUI_ExtrusionDlg (SMESHGUI* theModule, 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 */ @@ -254,7 +260,7 @@ SMESHGUI_ExtrusionDlg::SMESHGUI_ExtrusionDlg (SMESHGUI* theModule, myMeshOrSubMeshOrGroupFilter = new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR); - myHelpFileName = "extrusion.htm"; + myHelpFileName = "extrusion_page.html"; Init(); @@ -305,7 +311,6 @@ void SMESHGUI_ExtrusionDlg::Init (bool ResetControls) myBusy = false; LineEditElements->clear(); - myElementsId = ""; myNbOkElements = 0; myActor = 0; @@ -391,13 +396,6 @@ bool SMESHGUI_ExtrusionDlg::ClickOnApply() 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(); @@ -409,12 +407,20 @@ bool SMESHGUI_ExtrusionDlg::ClickOnApply() 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(); + if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ) + mySMESHGUI->updateObjBrowser(true); // new groups may appear Init(false); ConstructorsClicked(GetConstructorId()); SelectionIntoArgument(); @@ -490,26 +496,37 @@ void SMESHGUI_ExtrusionDlg::onTextChange (const QString& theNewText) 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); - 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++) { - 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 )) - aViewWindow->highlight( anIO, true, true ); - myElementsId = theNewText; + aViewWindow->highlight( myIO, true, true ); } } @@ -532,6 +549,7 @@ void SMESHGUI_ExtrusionDlg::SelectionIntoArgument() // clear myActor = 0; + myIO.Nullify(); QString aString = ""; // set busy flag @@ -552,81 +570,61 @@ void SMESHGUI_ExtrusionDlg::SelectionIntoArgument() myMesh = SMESH::GetMeshByIO(IO); if (myMesh->_is_nil()) return; - + myIO = IO; myActor = SMESH::FindActorByObject(myMesh); - if (!myActor) - return; 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()) { - int aConstructorId = GetConstructorId(); + SMESH::ElementType neededType = GetConstructorId() ? SMESH::FACE : SMESH::EDGE; SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); - if (!SMESH::IObjectToInterface(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(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(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(IO); + + if (!aGroup->_is_nil() && aGroup->GetType() == neededType) { // GROUP + // get IDs from smesh group + myElementsId = aGroup->GetListOfID(); + aNbElements = myElementsId->length(); } } - } else if (!SMESH::IObjectToInterface(IO)->_is_nil()) { //SUBMESH - // get submesh - SMESH::SMESH_subMesh_var aSubMesh = SMESH::IObjectToInterface(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(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 { - aNbElements = SMESH::GetNameOfSelectedElements(mySelector, IO, 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) diff --git a/src/SMESHGUI/SMESHGUI_ExtrusionDlg.h b/src/SMESHGUI/SMESHGUI_ExtrusionDlg.h index d1fe0f2b7..9a9c21e7a 100644 --- a/src/SMESHGUI/SMESHGUI_ExtrusionDlg.h +++ b/src/SMESHGUI/SMESHGUI_ExtrusionDlg.h @@ -33,6 +33,7 @@ #include "LightApp_SelectionMgr.h" #include "SUIT_SelectionFilter.h" +#include "Handle_SALOME_InteractiveObject.hxx" // QT Includes #include @@ -81,13 +82,15 @@ private: 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; + SMESH::long_array_var myElementsId; SMESH_Actor* myActor; + Handle(SALOME_InteractiveObject) myIO; SUIT_SelectionFilter* myMeshOrSubMeshOrGroupFilter; // widgets @@ -109,6 +112,7 @@ private: SMESHGUI_SpinBox* SpinBox_Dz; QLabel* TextLabelNbSteps; QSpinBox* SpinBox_NbSteps; + QCheckBox* MakeGroupsCheck; QGroupBox* GroupButtons; QPushButton* buttonOk; diff --git a/src/SMESHGUI/SMESHGUI_FilterDlg.cxx b/src/SMESHGUI/SMESHGUI_FilterDlg.cxx index 2b75ac0c4..db1157c1d 100755 --- a/src/SMESHGUI/SMESHGUI_FilterDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_FilterDlg.cxx @@ -1708,7 +1708,7 @@ void SMESHGUI_FilterDlg::construct (const QValueList& theTypes) aDlgLay->setStretchFactor(myMainFrame, 1); - myHelpFileName = "selection_filter_library.htm"; + myHelpFileName = "selection_filter_library_page.html"; Init(myTypes); } @@ -2540,7 +2540,8 @@ void SMESHGUI_FilterDlg::onSelectionDone() 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()); } } diff --git a/src/SMESHGUI/SMESHGUI_FilterLibraryDlg.cxx b/src/SMESHGUI/SMESHGUI_FilterLibraryDlg.cxx index f284afb39..6fd68f459 100644 --- a/src/SMESHGUI/SMESHGUI_FilterLibraryDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_FilterLibraryDlg.cxx @@ -147,7 +147,7 @@ void SMESHGUI_FilterLibraryDlg::construct (const QValueList& theTypes, aDlgLay->setStretchFactor(myMainFrame, 1); - myHelpFileName = "selection_filter_library.htm"; + myHelpFileName = "selection_filter_library_page.html"; Init(myTypes, myMode); } diff --git a/src/SMESHGUI/SMESHGUI_GroupDlg.cxx b/src/SMESHGUI/SMESHGUI_GroupDlg.cxx index 8968d907c..c03ce4fd5 100644 --- a/src/SMESHGUI/SMESHGUI_GroupDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_GroupDlg.cxx @@ -40,6 +40,7 @@ #include "SMESH_TypeFilter.hxx" #include "SMESH_Actor.h" +#include "SMESH_ActorUtils.h" #include "GEOMBase.h" #include "GEOM_SelectionFilter.h" @@ -82,12 +83,14 @@ #include #include #include +#include #include // STL includes #include #include +#include using namespace std; @@ -163,11 +166,11 @@ void SMESHGUI_GroupDlg::initDialog(bool create) 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")); - myHelpFileName = "/files/editing_groups.htm"; + myHelpFileName = "editing_groups_page.html"; } setSizeGripEnabled(TRUE); @@ -321,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")); - 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"); @@ -391,8 +388,7 @@ void SMESHGUI_GroupDlg::initDialog(bool create) connect(mySubMeshBtn, SIGNAL(clicked()), this, SLOT(setCurrentSelection())); connect(myGroupBtn, SIGNAL(clicked()), this, SLOT(setCurrentSelection())); connect(myGeomGroupBtn, SIGNAL(toggled(bool)), this, SLOT(onGeomSelectionButton(bool))); - connect(mySelectColorGroup, SIGNAL(toggled(bool)), this, SLOT(onSelectColorGroup(bool))); - connect(myColorSpinBox, SIGNAL(valueChanged(const QString&)), this, SLOT(onNbColorsChanged(const QString&))); + connect(myColorBtn, SIGNAL(clicked()), this, SLOT(onSelectColor())); connect(aOKBtn, SIGNAL(clicked()), this, SLOT(onOK())); connect(aApplyBtn, SIGNAL(clicked()), this, SLOT(onApply())); @@ -421,6 +417,7 @@ void SMESHGUI_GroupDlg::initDialog(bool create) myTypeGroup->setButton(0); updateButtons(); + //myName->setText(GetDefaultName(tr("SMESH_GROUP"))); } //================================================================================= @@ -437,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( SUIT_Session::session()->activeApplication()->activeStudy() ); + if ( !appStudy ) return aName; + _PTR(Study) aStudy = appStudy->studyDS(); + + std::set 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 : @@ -453,6 +486,8 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_Mesh_ptr theMesh) myActor = SMESH::FindActorByObject(myMesh); SMESH::SetPickable(myActor); + setDefaultGroupColor(); + SALOME_ListIO aList; mySelectionMgr->selectedObjects( aList ); if( !aList.IsEmpty() ) @@ -478,8 +513,10 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_GroupBase_ptr theGroup) 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()); @@ -543,6 +580,7 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_GroupBase_ptr theGroup) aShapeName = aGroupShapeSO->GetName().c_str(); } myGeomGroupLine->setText( aShapeName ); + myName->setText("Group On " + aShapeName); } } } @@ -581,15 +619,6 @@ void SMESHGUI_GroupDlg::onNameChanged (const QString& text) updateButtons(); } -//================================================================================= -// function : onNbColorsChanged() -// purpose : -//================================================================================= -void SMESHGUI_GroupDlg::onNbColorsChanged (const QString& text) -{ - updateButtons(); -} - //================================================================================= // function : onTypeChanged() // purpose : Group elements type radio button management @@ -612,11 +641,26 @@ void SMESHGUI_GroupDlg::onGrpTypeChanged (int id) { if (myGrpTypeId != id) { myWGStack->raiseWidget( id ); + if (id == 0) + myName->setText(myOldName); 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 @@ -713,25 +757,28 @@ bool SMESHGUI_GroupDlg::onApply() 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); - SMESH::setFileName ( aMeshGroupSO, QString::number(myColorSpinBox->value()) ); + //SMESH::setFileName ( aMeshGroupSO, QString::number(myColorSpinBox->value()) ); SMESH::setFileType ( aMeshGroupSO, "COULEURGROUP" ); /* init for next operation */ myName->setText(""); - myColorSpinBox->setValue(0); myElements->clear(); myGroup = SMESH::SMESH_Group::_nil(); } else { // edition 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 aAddList; QValueList::iterator anIt; @@ -836,25 +883,27 @@ bool SMESHGUI_GroupDlg::onApply() myGroupOnGeom = myMesh->CreateGroupFromGEOM(aType, myName->text(), aGroupVar); } - int aColorNumber = myColorSpinBox->value(); - myGroupOnGeom->SetColorNumber(aColorNumber); + SALOMEDS::Color aColor = getGroupColor(); + myGroupOnGeom->SetColor(aColor); _PTR(SObject) aMeshGroupSO = SMESH::FindSObject(myGroupOnGeom); - SMESH::setFileName ( aMeshGroupSO, QString::number(myColorSpinBox->value()) ); - + //SMESH::setFileName ( aMeshGroupSO, QString::number(myColorSpinBox->value()) ); SMESH::setFileType ( aMeshGroupSO,"COULEURGROUP" ); /* init for next operation */ myName->setText(""); - myColorSpinBox->setValue(0); myGroupOnGeom = SMESH::SMESH_GroupOnGeom::_nil(); } else { // edition myGroupOnGeom->SetName(myName->text()); - int aColorNumber = myColorSpinBox->value(); - myGroupOnGeom->SetColorNumber(aColorNumber); + 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); @@ -1108,6 +1157,8 @@ void SMESHGUI_GroupDlg::onObjectSelectionChanged() } myCurrentLineEdit->setText(aString); + myOldName = myName->text(); + myName->setText(aString); myCurrentLineEdit->home(false); updateButtons(); @@ -1222,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() @@ -1854,3 +1894,95 @@ void SMESHGUI_GroupDlg::onCloseShapeByMeshDlg(SUIT_Operation* op) 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 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 ); +} diff --git a/src/SMESHGUI/SMESHGUI_GroupDlg.h b/src/SMESHGUI/SMESHGUI_GroupDlg.h index be6f5ebdd..f5d9430b5 100644 --- a/src/SMESHGUI/SMESHGUI_GroupDlg.h +++ b/src/SMESHGUI/SMESHGUI_GroupDlg.h @@ -80,6 +80,8 @@ public: bool modal = FALSE, WFlags fl = 0 ); ~SMESHGUI_GroupDlg(); + static QString GetDefaultName(const QString& theOperation); + public slots: void onAdd(); @@ -103,16 +105,16 @@ private slots: 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 onNbColorsChanged(const QString& text); void onFilterAccepted(); + void onSelectColor(); + void onGeomPopup( int ); void onGeomSelectionButton( bool ); @@ -131,6 +133,14 @@ private: 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 */ SMESH_Actor* myActor; /* Current mesh actor */ @@ -144,6 +154,7 @@ private: QButtonGroup* myTypeGroup; QLineEdit* myName; + QString myOldName; QButtonGroup* myGrpTypeGroup; @@ -159,8 +170,7 @@ private: QPushButton* myGroupBtn; QLineEdit* myGroupLine; - QCheckBox* mySelectColorGroup; - QtxIntSpinBox* myColorSpinBox; + QPushButton* myColorBtn; QCheckBox* mySelectGeomGroup; QToolButton* myGeomGroupBtn; diff --git a/src/SMESHGUI/SMESHGUI_GroupOpDlg.cxx b/src/SMESHGUI/SMESHGUI_GroupOpDlg.cxx index 670d2f16e..4d9f9f6e4 100644 --- a/src/SMESHGUI/SMESHGUI_GroupOpDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_GroupOpDlg.cxx @@ -78,15 +78,15 @@ SMESHGUI_GroupOpDlg::SMESHGUI_GroupOpDlg( SMESHGUI* theModule, const int theMode 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")); - myHelpFileName = "/files/using_operations_on_groups.htm#Intersection"; + myHelpFileName = "using_operations_on_groups_page.html#intersection_anchor"; } 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(); diff --git a/src/SMESHGUI/SMESHGUI_Hypotheses.cxx b/src/SMESHGUI/SMESHGUI_Hypotheses.cxx index e94a8a993..2078b02c7 100644 --- a/src/SMESHGUI/SMESHGUI_Hypotheses.cxx +++ b/src/SMESHGUI/SMESHGUI_Hypotheses.cxx @@ -45,8 +45,8 @@ #include -SMESHGUI_GenericHypothesisCreator::SMESHGUI_GenericHypothesisCreator( const QString& aHypType ) - : myHypType( aHypType ), myIsCreate( false ), myDlg( 0 ) +SMESHGUI_GenericHypothesisCreator::SMESHGUI_GenericHypothesisCreator( const QString& theHypType ) + : myHypType( theHypType ), myIsCreate( false ), myDlg( 0 ) { } @@ -55,63 +55,62 @@ SMESHGUI_GenericHypothesisCreator::~SMESHGUI_GenericHypothesisCreator() } 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 ); - 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" ); - // 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) - SMESH::CreateHypothesis( hypType(), aHypName, isAlgo ); - + SMESH::CreateHypothesis( hypType(), theHypName, isAlgo ); 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 - _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(); - aBuilder->RemoveObjectWithChildren( SHyp ); + aBuilder->RemoveObjectWithChildren( aHypSObject ); } } } 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; - if( !editHypothesis( h, parent ) ) + if( !editHypothesis( theHypothesis, theHypName, theParent ) ) return; - SMESH::SObjectList listSOmesh = SMESH::GetMeshesUsingAlgoOrHypothesis( h ); + SMESH::SObjectList listSOmesh = SMESH::GetMeshesUsingAlgoOrHypothesis( theHypothesis ); if( listSOmesh.size() > 0 ) - for( int i=0; i( submSO ); @@ -124,29 +123,30 @@ void SMESHGUI_GenericHypothesisCreator::edit( SMESH::SMESH_Hypothesis_ptr h, QWi 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; + myHypName = theHypName; myHypo = SMESH::SMESH_Hypothesis::_duplicate( h ); - SMESHGUI_HypothesisDlg* Dlg = - new SMESHGUI_HypothesisDlg( const_cast( this ), parent ); + SMESHGUI_HypothesisDlg* Dlg = new SMESHGUI_HypothesisDlg( this, theParent ); myDlg = Dlg; QFrame* fr = buildFrame(); if( fr ) { Dlg->setCustomFrame( fr ); Dlg->setCaption( caption() ); + Dlg->setName( theHypName ); Dlg->setHIcon( icon() ); Dlg->setType( type() ); retrieveParams(); Dlg->show(); - //connect(myDlg, SIGNAL( closed() ), this, SLOT( onDlgClosed() )); qApp->enter_loop(); // make myDlg not modal -// res = myDlg->exec()==QDialog::Accepted; res = myDlg->result(); if( res ) { QString paramValues = storeParams(); @@ -332,6 +332,11 @@ QString SMESHGUI_GenericHypothesisCreator::hypType() const return myHypType; } +QString SMESHGUI_GenericHypothesisCreator::hypName() const +{ + return myHypName; +} + const SMESHGUI_GenericHypothesisCreator::ListOfWidgets& SMESHGUI_GenericHypothesisCreator::widgets() const { return myParamWidgets; @@ -409,21 +414,21 @@ SMESHGUI_HypothesisDlg::SMESHGUI_HypothesisDlg( SMESHGUI_GenericHypothesisCreato 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") - myHelpFileName = "/files/arithmetic_1d.htm#arithmetic_1D"; + myHelpFileName = "a1d_meshing_hypo_page.html#arithmetic_1d_anchor"; 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") - myHelpFileName = "/files/max._element_volume_hypothsis.htm"; + myHelpFileName = "max_element_volume_hypo_page.html"; 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") - myHelpFileName = "/files/arithmetic_1d.htm#deflection_1D"; + myHelpFileName = "a1d_meshing_hypo_page.html#deflection_1d_anchor"; else if ( aHypType == "AutomaticLength") - myHelpFileName = "/files/arithmetic_1d.htm#automatic_length"; + myHelpFileName = "a1d_meshing_hypo_page.html#automatic_length_anchor"; else if ( aHypType == "NumberOfSegments") - myHelpFileName = "/files/arithmetic_1d.htm#Number_of_elements"; + myHelpFileName = "a1d_meshing_hypo_page.html#number_of_segments_anchor"; else myHelpFileName = ""; diff --git a/src/SMESHGUI/SMESHGUI_Hypotheses.h b/src/SMESHGUI/SMESHGUI_Hypotheses.h index c76e409e1..fba15ebd1 100644 --- a/src/SMESHGUI/SMESHGUI_Hypotheses.h +++ b/src/SMESHGUI/SMESHGUI_Hypotheses.h @@ -47,18 +47,19 @@ class SMESHGUI_EXPORT SMESHGUI_GenericHypothesisCreator : public QObject Q_OBJECT public: - SMESHGUI_GenericHypothesisCreator( const QString& ); + SMESHGUI_GenericHypothesisCreator( const QString& theHypType ); 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 void onReject(); - QString hypType() const; - bool isCreation() const; + QString hypType() const; + QString hypName() const; + bool isCreation() const; protected: typedef struct @@ -95,10 +96,11 @@ protected slots: 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; + QString myHypName; QString myHypType; ListOfWidgets myParamWidgets; bool myIsCreate; @@ -113,9 +115,9 @@ public: 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(); @@ -125,7 +127,8 @@ protected slots: private: SMESHGUI_GenericHypothesisCreator* myCreator; QVBoxLayout* myLayout; - QLabel *myIconLabel, *myTypeLabel; + QLabel* myIconLabel; + QLabel* myTypeLabel; QString myHelpFileName; }; @@ -146,7 +149,8 @@ class HypothesisData 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 ), @@ -156,7 +160,8 @@ class HypothesisData Dim( theDim ), IsAux( theIsAux ), NeededHypos( theNeededHypos ), OptionalHypos( theOptionalHypos ), - InputTypes( theInputTypes ), OutputTypes( theOutputTypes ) + InputTypes( theInputTypes ), OutputTypes( theOutputTypes ), + IsNeedGeometry( theIsNeedGeometry ) {}; QString TypeName; //!< hypothesis type name @@ -167,6 +172,7 @@ class HypothesisData QString IconId; //!< icon identifier QValueList 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 diff --git a/src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx b/src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx index 114b8dbc3..6a393a254 100644 --- a/src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx +++ b/src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx @@ -113,6 +113,9 @@ namespace SMESH{ 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, @@ -208,21 +211,27 @@ namespace SMESH{ 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(); - + 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; - 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; } @@ -388,30 +397,21 @@ namespace SMESH{ const bool isAlgo) { if(MYDEBUG) MESSAGE("Create " << aHypType << " with name " << aHypName); - - SMESH::SMESH_Hypothesis_var Hyp; - HypothesisData* aHypData = GetHypothesisData(aHypType); QString aServLib = aHypData->ServerLibName; - 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) - SMESH::SetName(SHyp, aHypName); - //SalomeApp_Application* app = - // dynamic_cast(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); } @@ -542,27 +542,36 @@ namespace SMESH{ if (MorSM) { try { GEOM::GEOM_Object_var aShapeObject = SMESH::GetShapeOnMeshOrSubMesh(MorSM); - if (!aShapeObject->_is_nil()) { - SMESH::SMESH_Mesh_var aMesh = SMESH::SObjectToInterface(MorSM); - SMESH::SMESH_subMesh_var aSubMesh = SMESH::SObjectToInterface(MorSM); - - if (!aSubMesh->_is_nil()) - aMesh = aSubMesh->GetFather(); - - if (!aMesh->_is_nil()) { - res = aMesh->RemoveHypothesis(aShapeObject, anHyp); - if (res < SMESH::HYP_UNKNOWN_FATAL) { + SMESH::SMESH_Mesh_var aMesh = SMESH::SObjectToInterface(MorSM); + SMESH::SMESH_subMesh_var aSubMesh = SMESH::SObjectToInterface(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); } - if (res > SMESH::HYP_OK) { - wc.suspend(); - processHypothesisStatus(res, anHyp, false); - wc.resume(); - } - } - } + + } + else if(!aMesh->HasShapeToMesh()){ + 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); + } + } + 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); @@ -609,7 +618,7 @@ namespace SMESH{ #define CASE2MESSAGE(enum) case SMESH::enum: msg = QObject::tr( "STATE_" #enum ); break; 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 ]; const bool hasAlgo = ( strlen( error.algoName ) != 0 ); @@ -621,6 +630,7 @@ namespace SMESH{ CASE2MESSAGE( HYP_MISSING ); CASE2MESSAGE( HYP_NOTCONFORM ); CASE2MESSAGE( HYP_BAD_PARAMETER ); + CASE2MESSAGE( HYP_BAD_GEOMETRY ); default: continue; } // apply args to message: diff --git a/src/SMESHGUI/SMESHGUI_HypothesesUtils.h b/src/SMESHGUI/SMESHGUI_HypothesesUtils.h index f62b14da2..42172d76b 100644 --- a/src/SMESHGUI/SMESHGUI_HypothesesUtils.h +++ b/src/SMESHGUI/SMESHGUI_HypothesesUtils.h @@ -57,7 +57,8 @@ namespace SMESH{ SMESHGUI_EXPORT 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(); diff --git a/src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx b/src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx index b21ad3260..c31fc078a 100644 --- a/src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx @@ -138,16 +138,18 @@ QFrame* SMESHGUI_MakeNodeAtPointDlg::createMainFrame (QWidget* theParent) myX = new SMESHGUI_SpinBox(aCoordGrp); QLabel* aYLabel = new QLabel(tr("SMESH_Y"), aCoordGrp); - aYLabel->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs ); + //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->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, 3); - myY->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3); - myZ->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3); + 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 @@ -258,6 +260,7 @@ 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())); diff --git a/src/SMESHGUI/SMESHGUI_MergeNodesDlg.cxx b/src/SMESHGUI/SMESHGUI_MergeNodesDlg.cxx index 1fadd352b..45f754f52 100644 --- a/src/SMESHGUI/SMESHGUI_MergeNodesDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_MergeNodesDlg.cxx @@ -308,7 +308,7 @@ SMESHGUI_MergeNodesDlg::SMESHGUI_MergeNodesDlg( SMESHGUI* theModule, const char* // Init Mesh field from selection SelectionIntoArgument(); - myHelpFileName = "/files/merging_nodes.htm"; + myHelpFileName = "merging_nodes_page.html"; } //================================================================================= diff --git a/src/SMESHGUI/SMESHGUI_MeshDlg.cxx b/src/SMESHGUI/SMESHGUI_MeshDlg.cxx index 33d2e6485..b9b4f079d 100644 --- a/src/SMESHGUI/SMESHGUI_MeshDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_MeshDlg.cxx @@ -569,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 ) diff --git a/src/SMESHGUI/SMESHGUI_MeshDlg.h b/src/SMESHGUI/SMESHGUI_MeshDlg.h index 33f1b2d57..4b909b3c8 100644 --- a/src/SMESHGUI/SMESHGUI_MeshDlg.h +++ b/src/SMESHGUI/SMESHGUI_MeshDlg.h @@ -74,6 +74,9 @@ public: void setMaxHypoDim( const int ); void setHypoSets( const QStringList& ); void setGeomPopupEnabled( const bool ); + void disableTab(const int); + void enableTab(const int); + signals: diff --git a/src/SMESHGUI/SMESHGUI_MeshInfosDlg.cxx b/src/SMESHGUI/SMESHGUI_MeshInfosDlg.cxx index 4bcb125b1..2b74c92a8 100644 --- a/src/SMESHGUI/SMESHGUI_MeshInfosDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_MeshInfosDlg.cxx @@ -446,7 +446,7 @@ SMESHGUI_MeshInfosDlg::SMESHGUI_MeshInfosDlg (SMESHGUI* theModule, // init dialog with current selection onSelectionChanged(); - myHelpFileName = "/files/viewing_mesh_info.htm#advanced_infos"; + myHelpFileName = "mesh_infos_page.html#advanced_mesh_infos_anchor"; } //================================================================================= diff --git a/src/SMESHGUI/SMESHGUI_MeshOp.cxx b/src/SMESHGUI/SMESHGUI_MeshOp.cxx index 9aa469e68..11d298a6d 100644 --- a/src/SMESHGUI/SMESHGUI_MeshOp.cxx +++ b/src/SMESHGUI/SMESHGUI_MeshOp.cxx @@ -44,6 +44,8 @@ #include "SMESH_TypeFilter.hxx" #include "SMESH_NumberFilter.hxx" +#include CORBA_CLIENT_HEADER(SMESH_Gen) + #include "GEOM_SelectionFilter.h" #include "GEOMBase.h" #include "GeometryGUI.h" @@ -72,18 +74,6 @@ #include #include -enum { GLOBAL_ALGO_TAG =3, - GLOBAL_HYPO_TAG =2, - LOCAL_ALGO_TAG =2, - LOCAL_HYPO_TAG =1, - SUBMESH_ON_VERTEX_TAG =4, - 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 @@ -102,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(); + myIsOnGeometry = true; } //================================================================================ @@ -137,7 +128,7 @@ LightApp_Dialog* SMESHGUI_MeshOp::dlg() const //================================================================================ bool SMESHGUI_MeshOp::onApply() { - if( isStudyLocked() ) + if (isStudyLocked()) return false; QString aMess; @@ -199,7 +190,7 @@ bool SMESHGUI_MeshOp::onApply() //================================================================================ void SMESHGUI_MeshOp::startOperation() { - if( !myDlg ) + if (!myDlg) { myDlg = new SMESHGUI_MeshDlg( myToCreate, myIsMesh ); for ( int i = SMESH::DIM_0D; i <= SMESH::DIM_3D; i++ ) @@ -215,9 +206,9 @@ void SMESHGUI_MeshOp::startOperation() 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 ( myIsMesh ) myHelpFileName = "constructing_meshes_page.html"; + else myHelpFileName = "constructing_submeshes_page.html"; + else myHelpFileName = "editing_meshes_page.html"; } SMESHGUI_SelectionOp::startOperation(); @@ -336,11 +327,11 @@ bool SMESHGUI_MeshOp::isSubshapeOk() const //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); + if (mainObj->_is_nil()) + return false; + if (string(mainObj->GetEntry()) == string(mainGeom->GetEntry())) + return true; + mainObj = op->GetMainShape(mainObj); } } //return true; @@ -367,13 +358,13 @@ _PTR(SObject) SMESHGUI_MeshOp::getSubmeshByGeom() const if ( !geom->_is_nil() ) { int tag = -1; switch ( geom->GetShapeType() ) { - case GEOM::VERTEX: tag = SUBMESH_ON_VERTEX_TAG ; break; - 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; @@ -410,127 +401,161 @@ _PTR(SObject) SMESHGUI_MeshOp::getSubmeshByGeom() const //================================================================================ void SMESHGUI_MeshOp::selectionDone() { - if ( !dlg()->isShown() || !myDlg->isEnabled() ) + if (!dlg()->isShown() || !myDlg->isEnabled()) return; SMESHGUI_SelectionOp::selectionDone(); try { - // 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; + myIsOnGeometry = true; + + //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; } } - 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; + if (myIsOnGeometry) + { + // 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; + } + } + + 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; + } } } } - } - myDlg->setMaxHypoDim( shapeDim ); + myDlg->setMaxHypoDim( shapeDim ); - if ( !myToCreate ) // edition: read hypotheses - { - QString anObjEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Obj ); - _PTR(SObject) pObj = studyDS()->FindObjectID( anObjEntry.latin1() ); - if ( pObj != 0 ) + if (!myToCreate) // edition: read hypotheses { - 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(); - } - 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( 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 ) + if (pObj != 0) { - selectionMgr()->clearFilters(); - selectObject( pSubmesh ); - SMESHGUI::GetSMESHGUI()->switchToOperation(704); - return; + 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->selectObject( "", SMESHGUI_MeshDlg::Geom, "" ); - selectObject( _PTR(SObject)() ); - selectionDone(); - } + 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( 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( 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( pMesh ); + if ( !mesh->_is_nil() ) + enable = ( shapeDim > 1 ) && ( mesh->NbEdges() > 0 ); + } + myDlg->setGeomPopupEnabled( enable ); } - 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); + } + //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 ) @@ -570,7 +595,7 @@ bool SMESHGUI_MeshOp::isValid( QString& theMess ) const 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 @@ -582,7 +607,7 @@ bool SMESHGUI_MeshOp::isValid( QString& theMess ) const return false; } } - } + }*/ // Geom if ( myToCreate ) @@ -673,7 +698,7 @@ void SMESHGUI_MeshOp::availableHyps( const int theDim, 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 ) @@ -693,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 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) @@ -706,12 +730,12 @@ void SMESHGUI_MeshOp::existingHyps( const int theDim, const int theHypType, _PTR(SObject) theFather, QStringList& theHyps, - QValueList& theHypVars, + THypList& theHypList, HypothesisData* theAlgoData) { // Clear hypoheses list theHyps.clear(); - theHypVars.clear(); + theHypList.clear(); if ( !theFather ) return; @@ -726,9 +750,9 @@ void SMESHGUI_MeshOp::existingHyps( const int theDim, 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 - aPart = theHypType == Algo ? LOCAL_ALGO_TAG : LOCAL_HYPO_TAG; + aPart = theHypType == Algo ? SMESH::Tag_AlgorithmsRoot : SMESH::Tag_HypothesisRoot; if ( theFather->FindSubObject( aPart, aHypRoot ) ) { @@ -754,15 +778,15 @@ void SMESHGUI_MeshOp::existingHyps( const int theDim, 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 )) { - //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() ) ); } } } @@ -884,6 +908,19 @@ void SMESHGUI_MeshOp::onCreateHyp( const int theHypType, const int theIndex ) * \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) @@ -896,13 +933,30 @@ void SMESHGUI_MeshOp::createHypothesis (const int theDim, 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) - SMESH::CreateHypothesis(theTypeName, aData->Label, false); + SMESH::CreateHypothesis(theTypeName, aHypName, false); } else { // Get hypotheses creator client (GUI) SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator(theTypeName); @@ -914,10 +968,10 @@ void SMESHGUI_MeshOp::createHypothesis (const int theDim, SMESH::SMESH_Hypothesis_var initParamHyp = getInitParamsHypothesis(theTypeName, aData->ServerLibName); myDlg->setEnabled( false ); - aCreator->create(initParamHyp, myDlg); + aCreator->create(initParamHyp, aHypName, myDlg); myDlg->setEnabled( true ); } else { - SMESH::CreateHypothesis(theTypeName, aData->Label, false); + SMESH::CreateHypothesis(theTypeName, aHypName, false); } } @@ -949,18 +1003,19 @@ void SMESHGUI_MeshOp::onEditHyp( const int theHypType, const int theIndex ) if (aDim == -1) return; - QValueList aList = myExistingHyps[ aDim ][ theHypType ]; + const THypList& aList = myExistingHyps[ aDim ][ theHypType ]; 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; - char* aTypeName = aHyp->GetName(); + CORBA::String_var aTypeName = aHyp->GetName(); SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator( aTypeName ); if ( aCreator ) { myDlg->setEnabled( false ); - aCreator->edit( aHyp.in(), dlg() ); + aCreator->edit( aHyp.in(), aHypItem.second, dlg() ); myDlg->setEnabled( true ); } } @@ -1035,7 +1090,7 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex, } HypothesisData* prevAlgo = algoData; bool noCompatible = false; - for ( ; dim * dir <= lastDim * dir ; dim += dir ) + for (; dim * dir <= lastDim * dir; dim += dir) { if ( !isAccessibleDim( dim )) continue; @@ -1093,20 +1148,21 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex, 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 ); - QString curHypType = curHyp->GetName(); + CORBA::String_var curHypType = curHyp->GetName(); 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 ]; - if ( curAlgo && hypData && isCompatible( curAlgo, hypData, type )) + if (curAlgo && hypData && isCompatible(curAlgo, hypData, type)) break; else curAlgo = 0; @@ -1118,7 +1174,8 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex, { // 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(); } @@ -1136,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 - QString hypTypeName = myExistingHyps[ dim ][ type ][ 0 ]->GetName(); + CORBA::String_var hypTypeName = myExistingHyps[ dim ][ type ].first().first->GetName(); bool isOptional = true; if ( algoByDim[ dim ] && - SMESH::IsAvailableHypothesis( algoByDim[ dim ], hypTypeName, isOptional ) && + SMESH::IsAvailableHypothesis( algoByDim[ dim ], hypTypeName.in(), isOptional ) && !isOptional ) hypIndex = 0; } @@ -1175,7 +1232,7 @@ void SMESHGUI_MeshOp::onHypoSet( const QString& theSetName ) const QString& aHypoTypeName = (*aHypoList)[ i ]; HypothesisData* aHypData = SMESH::GetHypothesisData(aHypoTypeName); if (!aHypData) - continue; + continue; int aDim = aHypData->Dim[0]; // create or/and set @@ -1192,6 +1249,9 @@ void SMESHGUI_MeshOp::onHypoSet( const QString& theSetName ) } 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; @@ -1223,8 +1283,8 @@ bool SMESHGUI_MeshOp::createMesh( QString& theMess ) QStringList aList; myDlg->selectedObject( SMESHGUI_MeshDlg::Geom, aList ); QStringList::Iterator it = aList.begin(); - for(; it!=aList.end(); it++) { - + for (; it!=aList.end(); it++) + { QString aGeomEntry = *it; _PTR(SObject) pGeom = studyDS()->FindObjectID( aGeomEntry.latin1() ); GEOM::GEOM_Object_var aGeomVar = @@ -1251,7 +1311,7 @@ bool SMESHGUI_MeshOp::createMesh( QString& theMess ) 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 ]; + SMESH::SMESH_Hypothesis_var aHypVar = myExistingHyps[ aDim ][ aHypType ][ aHypIndex ].first; if ( !aHypVar->_is_nil() ) SMESH::AddHypothesisOnMesh( aMeshVar, aHypVar ); } @@ -1379,7 +1439,7 @@ bool SMESHGUI_MeshOp::createSubMesh( QString& theMess ) 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 ); } @@ -1493,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 - QValueList& aHypVarList = myExistingHyps[ theDim ][ Algo ]; - QValueList::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; @@ -1518,7 +1579,7 @@ SMESH::SMESH_Hypothesis_var SMESHGUI_MeshOp::getAlgo( const int theDim ) // Create algorithm if (aCreator) - aCreator->create(true, myDlg); + aCreator->create(true, aHypName, myDlg); else SMESH::CreateHypothesis(aHypName, aHypData->Label, true); } @@ -1527,11 +1588,12 @@ SMESH::SMESH_Hypothesis_var SMESHGUI_MeshOp::getAlgo( const int theDim ) existingHyps( theDim, Algo, aFather, tmpList, myExistingHyps[ theDim ][ Algo ] ); } - QValueList& aNewHypVarList = myExistingHyps[ theDim ][ Algo ]; + THypList& aNewHypVarList = myExistingHyps[ theDim ][ Algo ]; 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; @@ -1557,32 +1619,35 @@ void SMESHGUI_MeshOp::readMesh() 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() ); - 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; - for ( int dim = SMESH::DIM_0D; 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 ] ); @@ -1590,8 +1655,8 @@ void SMESHGUI_MeshOp::readMesh() 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 ) { @@ -1607,7 +1672,7 @@ void SMESHGUI_MeshOp::readMesh() // get hypotheses bool hypWithoutAlgo = false; - for ( int dim = SMESH::DIM_0D; dim <= SMESH::DIM_3D; dim++ ) + for ( int dim = aDim; dim <= SMESH::DIM_3D; dim++ ) { for ( int hypType = MainHyp; hypType <= AddHyp; hypType++ ) { @@ -1616,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 ) { - 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 @@ -1673,16 +1738,16 @@ QString SMESHGUI_MeshOp::name( _PTR(SObject) theSO ) const */ //================================================================================ int SMESHGUI_MeshOp::find( const SMESH::SMESH_Hypothesis_var& theHyp, - const QValueList& theHypList ) const + const THypList& theHypList ) const { int aRes = -1; if ( !theHyp->_is_nil() ) { int i = 0; - QValueList::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; @@ -1718,27 +1783,29 @@ bool SMESHGUI_MeshOp::editMeshOrSubMesh( QString& theMess ) 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; // First, remove old algos in order to avoid messages on algorithm hiding - for ( int dim = SMESH::DIM_0D; dim <= SMESH::DIM_3D; dim++ ) + 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(); + 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() ); + SMESH::RemoveHypothesisOrAlgorithmOnMesh ( pObj, myObjHyps[ dim ][ Algo ].first().first ); myObjHyps[ dim ][ Algo ].clear(); } } } // Assign new algorithms and hypotheses - for ( int dim = SMESH::DIM_0D; dim <= SMESH::DIM_3D; dim++ ) + for ( int dim = aDim; dim <= SMESH::DIM_3D; dim++ ) { if ( !isAccessibleDim( dim )) continue; @@ -1749,8 +1816,9 @@ bool SMESHGUI_MeshOp::editMeshOrSubMesh( QString& theMess ) if ( !anAlgoVar->_is_nil() && // some algo selected and myObjHyps[ dim ][ Algo ].count() == 0 ) // no algo assigned { - SMESH::SMESH_Mesh_var aMeshVar = - SMESH::SMESH_Mesh::_narrow( _CAST(SObject,pObj)->GetObject() ); + 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 ); @@ -1760,7 +1828,7 @@ bool SMESHGUI_MeshOp::editMeshOrSubMesh( QString& theMess ) if ( !aVar->_is_nil() ) SMESH::AddHypothesisOnSubMesh( aVar, anAlgoVar ); } - myObjHyps[ dim ][ Algo ].append( anAlgoVar ); + myObjHyps[ dim ][ Algo ].append( THypItem( anAlgoVar, aName) ); } // assign hypotheses @@ -1772,13 +1840,13 @@ bool SMESHGUI_MeshOp::editMeshOrSubMesh( QString& theMess ) // remove old hypotheses if ( myObjHyps[ dim ][ hypType ].count() > 0 ) { - anOldHypIndex = find( myObjHyps[ dim ][ hypType ].first(), + 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() ); + ( pObj, myObjHyps[ dim ][ hypType ].first().first ); myObjHyps[ dim ][ hypType ].clear(); } } @@ -1792,7 +1860,7 @@ bool SMESHGUI_MeshOp::editMeshOrSubMesh( QString& theMess ) if ( isMesh ) { SMESH::AddHypothesisOnMesh - (aMeshVar, myExistingHyps[ dim ][ hypType ][ aNewHypIndex ] ); + (aMeshVar, myExistingHyps[ dim ][ hypType ][ aNewHypIndex ].first ); } else { @@ -1800,7 +1868,7 @@ bool SMESHGUI_MeshOp::editMeshOrSubMesh( QString& theMess ) SMESH::SMESH_subMesh::_narrow( _CAST(SObject,pObj)->GetObject() ); if ( !aVar->_is_nil() ) SMESH::AddHypothesisOnSubMesh - ( aVar, myExistingHyps[ dim ][ hypType ][ aNewHypIndex ] ); + ( aVar, myExistingHyps[ dim ][ hypType ][ aNewHypIndex ].first ); } } // reread all hypotheses of mesh if necessary diff --git a/src/SMESHGUI/SMESHGUI_MeshOp.h b/src/SMESHGUI/SMESHGUI_MeshOp.h index 190c386dd..c658fb74e 100644 --- a/src/SMESHGUI/SMESHGUI_MeshOp.h +++ b/src/SMESHGUI/SMESHGUI_MeshOp.h @@ -35,11 +35,12 @@ #include "SMESH_SMESHGUI.hxx" #include "SMESHGUI_SelectionOp.h" -#include #include -#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 class SMESHGUI_MeshDlg; class SMESHGUI_ShapeByMeshOp; @@ -58,6 +59,15 @@ public: enum HypType{ Algo = 0, MainHyp, AddHyp, NbHypTypes }; + typedef std::pair 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(); @@ -94,7 +104,7 @@ private: const int theHypType, _PTR(SObject) theFather, QStringList& theHyps, - QValueList& theHypVars, + THypList& theHypList, HypothesisData* theAlgoData = 0); HypothesisData* hypData( const int theDim, const int theHypType, @@ -115,7 +125,7 @@ private: void readMesh(); QString name( _PTR(SObject) ) const; int find( const SMESH::SMESH_Hypothesis_var&, - const QValueList& ) const; + const THypList& theHypList) const; SMESH::SMESH_Hypothesis_var getInitParamsHypothesis( const QString& aHypType, const QString& aServerLib ) const; bool isSubshapeOk() const; @@ -123,16 +133,14 @@ private: void selectObject( _PTR(SObject) ) const; private: - typedef QMap< int, QValueList > IdToHypListMap; - typedef QMap< int, IdToHypListMap > DimToHypMap; - 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 diff --git a/src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx b/src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx index 8d72e0ede..1c99b81ef 100755 --- a/src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx @@ -132,7 +132,7 @@ SMESHGUI_MeshPatternDlg::SMESHGUI_MeshPatternDlg( SMESHGUI* theModule, mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector(); - myHelpFileName = "pattern_mapping.htm"; + myHelpFileName = "pattern_mapping_page.html"; Init(); } diff --git a/src/SMESHGUI/SMESHGUI_MeshUtils.cxx b/src/SMESHGUI/SMESHGUI_MeshUtils.cxx index b8e5c3055..ccbdaff7d 100644 --- a/src/SMESHGUI/SMESHGUI_MeshUtils.cxx +++ b/src/SMESHGUI/SMESHGUI_MeshUtils.cxx @@ -20,6 +20,7 @@ #include "SMESHGUI_MeshUtils.h" #include "SMESHGUI_Utils.h" +#include "SALOMEDSClient_Study.hxx" #include "SALOMEconfig.h" #include CORBA_SERVER_HEADER(SMESH_Group) @@ -44,4 +45,27 @@ namespace SMESH 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(""); + } + } diff --git a/src/SMESHGUI/SMESHGUI_MeshUtils.h b/src/SMESHGUI/SMESHGUI_MeshUtils.h index 81cdb67c1..c7e93a065 100644 --- a/src/SMESHGUI/SMESHGUI_MeshUtils.h +++ b/src/SMESHGUI/SMESHGUI_MeshUtils.h @@ -27,12 +27,15 @@ #include "SALOMEconfig.h" #include CORBA_SERVER_HEADER(SMESH_Mesh) +#include + namespace SMESH{ SMESHGUI_EXPORT SMESH_Mesh_var GetMeshByIO(const Handle(SALOME_InteractiveObject)& theIO); + QString UniqueMeshName(const char* theBaseName, const char* thePostfix); } diff --git a/src/SMESHGUI/SMESHGUI_MoveNodesDlg.cxx b/src/SMESHGUI/SMESHGUI_MoveNodesDlg.cxx index 8eb5e67ce..de8ebe9b5 100644 --- a/src/SMESHGUI/SMESHGUI_MoveNodesDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_MoveNodesDlg.cxx @@ -118,7 +118,7 @@ SMESHGUI_MoveNodesDlg::SMESHGUI_MoveNodesDlg (SMESHGUI* theModule, mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector(); - myHelpFileName = "/files/displacing_nodes.htm"; + myHelpFileName = "moving_nodes_page.html"; Init(); } @@ -184,16 +184,18 @@ QFrame* SMESHGUI_MoveNodesDlg::createMainFrame (QWidget* theParent) myX = new SMESHGUI_SpinBox(aCoordGrp); QLabel* aYLabel = new QLabel(tr("SMESH_Y"), aCoordGrp); - aYLabel->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs ); + //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->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, 25.0, 3); - myY->RangeStepAndValidator(COORD_MIN, COORD_MAX, 25.0, 3); - myZ->RangeStepAndValidator(COORD_MIN, COORD_MAX, 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); diff --git a/src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx b/src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx index 8ef34e62a..70bf3f61d 100755 --- a/src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx @@ -1080,7 +1080,7 @@ SMESHGUI_ChangeOrientationDlg 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() @@ -1120,7 +1120,7 @@ SMESHGUI_UnionOfTrianglesDlg myCriterionGrp->show(); - myHelpFileName = "/files/uniting_a_set_of_triangles.htm"; + myHelpFileName = "uniting_set_of_triangles_page.html"; } SMESHGUI_UnionOfTrianglesDlg::~SMESHGUI_UnionOfTrianglesDlg() @@ -1160,7 +1160,7 @@ SMESHGUI_CuttingOfQuadsDlg 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() diff --git a/src/SMESHGUI/SMESHGUI_NodesDlg.cxx b/src/SMESHGUI/SMESHGUI_NodesDlg.cxx index b89009898..4b135d591 100644 --- a/src/SMESHGUI/SMESHGUI_NodesDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_NodesDlg.cxx @@ -310,17 +310,21 @@ SMESHGUI_NodesDlg::SMESHGUI_NodesDlg (SMESHGUI* theModule, GroupCoordinatesLayout->setAlignment(Qt::AlignTop); GroupCoordinatesLayout->setSpacing(6); GroupCoordinatesLayout->setMargin(11); + 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_Y = new QLabel(GroupCoordinates, "TextLabel_Y"); - TextLabel_Y->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs ); + //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_Z->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs ); + //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); @@ -335,7 +339,7 @@ SMESHGUI_NodesDlg::SMESHGUI_NodesDlg (SMESHGUI* theModule, 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(); @@ -363,9 +367,9 @@ void SMESHGUI_NodesDlg::Init () step = 25.0; /* min, max, step and decimals for spin boxes */ - SpinBox_X->RangeStepAndValidator(COORD_MIN, COORD_MAX, step, 3); - SpinBox_Y->RangeStepAndValidator(COORD_MIN, COORD_MAX, step, 3); - SpinBox_Z->RangeStepAndValidator(COORD_MIN, COORD_MAX, 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); diff --git a/src/SMESHGUI/SMESHGUI_RemoveElementsDlg.cxx b/src/SMESHGUI/SMESHGUI_RemoveElementsDlg.cxx index d4636f4f2..77d3940e8 100644 --- a/src/SMESHGUI/SMESHGUI_RemoveElementsDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_RemoveElementsDlg.cxx @@ -186,7 +186,7 @@ SMESHGUI_RemoveElementsDlg 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 */ } diff --git a/src/SMESHGUI/SMESHGUI_RemoveNodesDlg.cxx b/src/SMESHGUI/SMESHGUI_RemoveNodesDlg.cxx index 329d5db3b..1ceff864d 100644 --- a/src/SMESHGUI/SMESHGUI_RemoveNodesDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_RemoveNodesDlg.cxx @@ -186,7 +186,7 @@ SMESHGUI_RemoveNodesDlg 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 */ } diff --git a/src/SMESHGUI/SMESHGUI_RenumberingDlg.cxx b/src/SMESHGUI/SMESHGUI_RenumberingDlg.cxx index 17fe6f6a8..b1cdd6b59 100644 --- a/src/SMESHGUI/SMESHGUI_RenumberingDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_RenumberingDlg.cxx @@ -99,11 +99,11 @@ SMESHGUI_RenumberingDlg::SMESHGUI_RenumberingDlg( SMESHGUI* theModule, const cha 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" )); - 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); diff --git a/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx b/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx index 90b699a7f..c10a0898b 100644 --- a/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx @@ -290,6 +290,12 @@ SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( SMESHGUI* theModule, const char* 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 */ @@ -326,7 +332,7 @@ SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( SMESHGUI* theModule, const char* myMeshOrSubMeshOrGroupFilter = new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR); - myHelpFileName = "revolution.htm"; + myHelpFileName = "revolution_page.html"; Init(); @@ -479,12 +485,21 @@ void SMESHGUI_RevolutionDlg::ClickOnApply() 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(); + if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ) + mySMESHGUI->updateObjBrowser(true); // new groups may appear Init(false); ConstructorsClicked(GetConstructorId()); SelectionIntoArgument(); @@ -640,6 +655,14 @@ void SMESHGUI_RevolutionDlg::SelectionIntoArgument() 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(); diff --git a/src/SMESHGUI/SMESHGUI_RevolutionDlg.h b/src/SMESHGUI/SMESHGUI_RevolutionDlg.h index 9db7f4859..389c380a1 100644 --- a/src/SMESHGUI/SMESHGUI_RevolutionDlg.h +++ b/src/SMESHGUI/SMESHGUI_RevolutionDlg.h @@ -110,6 +110,7 @@ private: QPushButton* SelectElementsButton; QLineEdit* LineEditElements; QCheckBox* CheckBoxMesh; + QCheckBox* MakeGroupsCheck; QLabel* TextLabelPoint; QPushButton* SelectPointButton; diff --git a/src/SMESHGUI/SMESHGUI_RotationDlg.cxx b/src/SMESHGUI/SMESHGUI_RotationDlg.cxx index e4f4a1d5b..d587855d3 100644 --- a/src/SMESHGUI/SMESHGUI_RotationDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_RotationDlg.cxx @@ -51,6 +51,7 @@ #include "SVTK_Selector.h" #include "SVTK_Selection.h" #include "SALOME_ListIO.hxx" +#include "SALOMEDSClient_SObject.hxx" #include "utilities.h" @@ -77,6 +78,8 @@ using namespace std; +enum { MOVE_ELEMS_BUTTON = 0, COPY_ELEMS_BUTTON, MAKE_MESH_BUTTON }; //!< action type + //================================================================================= // class : SMESHGUI_RotationDlg() // purpose : @@ -175,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" )); - TextLabelElements->setFixedWidth(74); + //TextLabelElements->setFixedWidth(74); GroupArgumentsLayout->addWidget(TextLabelElements, 0, 0); SelectElementsButton = new QPushButton(GroupArguments, "SelectElementsButton"); @@ -184,14 +187,14 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam 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->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" )); - GroupArgumentsLayout->addMultiCellWidget(CheckBoxMesh, 1, 1, 0, 2); + GroupArgumentsLayout->addMultiCellWidget(CheckBoxMesh, 1, 1, 0, 3); // Controls for axis defining GroupAxis = new QGroupBox(GroupArguments, "GroupAxis"); @@ -268,20 +271,31 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam 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")); - 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); - // 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); @@ -314,7 +328,7 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam myMeshOrSubMeshOrGroupFilter = new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR); - myHelpFileName = "/files/rotation.htm"; + myHelpFileName = "rotation_page.html"; Init(); @@ -339,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(ActionGroup, SIGNAL(clicked(int)), SLOT(onActionClicked(int))); this->show(); /* displays Dialog */ ConstructorsClicked(0); + //SelectionIntoArgument(); + onActionClicked(MOVE_ELEMS_BUTTON); resize(0,0); // ?? } @@ -384,8 +401,11 @@ void SMESHGUI_RotationDlg::Init (bool ResetControls) SpinBox_Angle->SetValue(45); - CheckBoxCopy->setChecked(false); + ((QRadioButton*) ActionGroup->find( MOVE_ELEMS_BUTTON ))->setChecked(TRUE); CheckBoxMesh->setChecked(false); +// MakeGroupsCheck->setChecked(false); +// MakeGroupsCheck->setEnabled(false); +// onSelectMesh(false); } onSelectMesh(CheckBoxMesh->isChecked()); @@ -427,18 +447,37 @@ void SMESHGUI_RotationDlg::ClickOnApply() 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); - 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(); + if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() || + actionButton == MAKE_MESH_BUTTON ) + mySMESHGUI->updateObjBrowser(true); // new groups may appear Init(false); + //ConstructorsClicked(GetConstructorId()); SelectionIntoArgument(); } } @@ -592,6 +631,14 @@ void SMESHGUI_RotationDlg::SelectionIntoArgument() 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); @@ -672,8 +719,10 @@ void SMESHGUI_RotationDlg::SelectionIntoArgument() } myBusy = true; - if (myEditCurrentArgument == (QWidget*)LineEditElements) + if (myEditCurrentArgument == (QWidget*)LineEditElements) { LineEditElements->setText(aString); + setNewMeshName(); + } myBusy = false; // OK @@ -854,6 +903,61 @@ void SMESHGUI_RotationDlg::onVectorChanged() } } + +//======================================================================= +//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 : diff --git a/src/SMESHGUI/SMESHGUI_RotationDlg.h b/src/SMESHGUI/SMESHGUI_RotationDlg.h index 86075d763..51a5e141a 100644 --- a/src/SMESHGUI/SMESHGUI_RotationDlg.h +++ b/src/SMESHGUI/SMESHGUI_RotationDlg.h @@ -81,6 +81,7 @@ private: void hideEvent (QHideEvent*); /* ESC key */ void keyPressEvent(QKeyEvent*); bool IsAxisOk(); + void setNewMeshName(); SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */ LightApp_SelectionMgr* mySelectionMgr; /* User shape selection */ @@ -128,7 +129,10 @@ private: QLabel* TextLabelAngle; SMESHGUI_SpinBox* SpinBox_Angle; - QCheckBox* CheckBoxCopy; + //QCheckBox* CheckBoxCopy; + QButtonGroup* ActionGroup; + QCheckBox* MakeGroupsCheck; + QLineEdit* LineEditNewMesh; QString myHelpFileName; @@ -146,6 +150,7 @@ private slots: void onTextChange (const QString&); void onSelectMesh (bool toSelectMesh); void onVectorChanged(); + void onActionClicked(int button); protected: QGridLayout* SMESHGUI_RotationDlgLayout; diff --git a/src/SMESHGUI/SMESHGUI_Selection.cxx b/src/SMESHGUI/SMESHGUI_Selection.cxx index 7602c410b..9791ebebd 100644 --- a/src/SMESHGUI/SMESHGUI_Selection.cxx +++ b/src/SMESHGUI/SMESHGUI_Selection.cxx @@ -36,8 +36,9 @@ #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 @@ -82,7 +83,7 @@ void SMESHGUI_Selection::init( const QString& client, LightApp_SelectionMgr* mgr //======================================================================= void SMESHGUI_Selection::processOwner( const LightApp_DataOwner* ow ) { - const LightApp_SVTKDataOwner* owner = + const LightApp_SVTKDataOwner* owner = dynamic_cast ( ow ); if( owner ) myActors.append( dynamic_cast( 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 ) ); + 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 ) ); @@ -252,6 +254,27 @@ QString SMESHGUI_Selection::controlMode( int ind ) const 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 : @@ -291,13 +314,30 @@ QVariant SMESHGUI_Selection::isComputable( int ind ) const /* Handle(SALOME_InteractiveObject) io = static_cast( 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 ) { - 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; - switch( aLevel ) + switch (aLevel) { case 1: - if( anOTag>=3 ) + if (anOTag >= SMESH::Tag_FirstMeshRoot) res = MESH; break; case 2: - switch( aFTag ) + switch (aFTag) { - case 1: + case SMESH::Tag_HypothesisRoot: res = HYPOTHESIS; break; - case 2: + case SMESH::Tag_AlgorithmsRoot: res = ALGORITHM; break; } break; case 3: - switch( aFTag ) + switch (aFTag) { - case 4: + case SMESH::Tag_SubMeshOnVertex: res = SUBMESH_VERTEX; break; - case 5: + case SMESH::Tag_SubMeshOnEdge: res = SUBMESH_EDGE; break; - case 7: + case SMESH::Tag_SubMeshOnFace: res = SUBMESH_FACE; break; - case 9: + case SMESH::Tag_SubMeshOnSolid: res = SUBMESH_SOLID; break; - case 10: + case SMESH::Tag_SubMeshOnCompound: res = SUBMESH_COMPOUND; break; + default: + if (aFTag >= SMESH::Tag_FirstGroup) + res = GROUP; + else + res = SUBMESH; } - if( aFTag>10 ) - res = GROUP; - else - res = SUBMESH; - break; } diff --git a/src/SMESHGUI/SMESHGUI_Selection.h b/src/SMESHGUI/SMESHGUI_Selection.h index 6dd5bc271..440c8d4bd 100644 --- a/src/SMESHGUI/SMESHGUI_Selection.h +++ b/src/SMESHGUI/SMESHGUI_Selection.h @@ -50,6 +50,7 @@ public: 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; diff --git a/src/SMESHGUI/SMESHGUI_SewingDlg.cxx b/src/SMESHGUI/SMESHGUI_SewingDlg.cxx index 238e88a41..a6ae00781 100644 --- a/src/SMESHGUI/SMESHGUI_SewingDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_SewingDlg.cxx @@ -297,7 +297,7 @@ SMESHGUI_SewingDlg::SMESHGUI_SewingDlg( SMESHGUI* theModule, const char* name, mySMESHGUI->SetActiveDialogBox((QDialog*)this); - myHelpFileName = "/files/sewing_meshes.htm"; + myHelpFileName = "sewing_meshes_page.html"; Init(); diff --git a/src/SMESHGUI/SMESHGUI_SingleEditDlg.cxx b/src/SMESHGUI/SMESHGUI_SingleEditDlg.cxx index ce21c9c17..201b1c126 100755 --- a/src/SMESHGUI/SMESHGUI_SingleEditDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_SingleEditDlg.cxx @@ -570,7 +570,7 @@ SMESHGUI_TrianglesInversionDlg : 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() @@ -595,7 +595,7 @@ SMESHGUI_UnionOfTwoTrianglesDlg : SMESHGUI_SingleEditDlg(theModule,theName) { setCaption(tr("CAPTION")); - myHelpFileName = "/files/uniting_two_triangles.htm"; + myHelpFileName = "uniting_two_triangles_page.html"; } SMESHGUI_UnionOfTwoTrianglesDlg::~SMESHGUI_UnionOfTwoTrianglesDlg() diff --git a/src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx b/src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx index 231dba97f..d46673b73 100644 --- a/src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx @@ -275,7 +275,7 @@ SMESHGUI_SmoothingDlg::SMESHGUI_SmoothingDlg( SMESHGUI* theModule, const char* n myMeshOrSubMeshOrGroupFilter = new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR); - myHelpFileName = "/files/smoothing.htm"; + myHelpFileName = "smoothing_page.html"; Init(); diff --git a/src/SMESHGUI/SMESHGUI_SpinBox.h b/src/SMESHGUI/SMESHGUI_SpinBox.h index cc5c99689..53069b718 100644 --- a/src/SMESHGUI/SMESHGUI_SpinBox.h +++ b/src/SMESHGUI/SMESHGUI_SpinBox.h @@ -36,6 +36,7 @@ // 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 diff --git a/src/SMESHGUI/SMESHGUI_StandardMeshInfosDlg.cxx b/src/SMESHGUI/SMESHGUI_StandardMeshInfosDlg.cxx index 5fffc787e..3fe48b107 100644 --- a/src/SMESHGUI/SMESHGUI_StandardMeshInfosDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_StandardMeshInfosDlg.cxx @@ -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 // -// 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 "SMESH.hxx" #include "SMESH_TypeFilter.hxx" #include "SALOMEDSClient_Study.hxx" @@ -178,7 +177,7 @@ SMESHGUI_StandardMeshInfosDlg::SMESHGUI_StandardMeshInfosDlg( SMESHGUI* theModul 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 - aMeshSO->FindSubObject(Tag_NodeGroups, anObj); + aMeshSO->FindSubObject(SMESH::Tag_NodeGroups, anObj); 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(); - aMeshSO->FindSubObject(Tag_EdgeGroups, anObj); + aMeshSO->FindSubObject(SMESH::Tag_EdgeGroups, anObj); 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(); - aMeshSO->FindSubObject(Tag_FaceGroups , anObj); + aMeshSO->FindSubObject(SMESH::Tag_FaceGroups , anObj); 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(); - aMeshSO->FindSubObject(Tag_VolumeGroups, anObj); + aMeshSO->FindSubObject(SMESH::Tag_VolumeGroups, anObj); if (anObj) { _PTR(ChildIterator) it = aStudy->NewChildIterator(anObj); if (!hasGroup && it->More()) @@ -458,14 +457,14 @@ void SMESHGUI_StandardMeshInfosDlg::onStartSelection() 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 { - QString platform; + QString platform; #ifdef WIN32 - platform = "winapplication"; + platform = "winapplication"; #else - platform = "application"; + platform = "application"; #endif SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"), QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE"). diff --git a/src/SMESHGUI/SMESHGUI_Swig.cxx b/src/SMESHGUI/SMESHGUI_Swig.cxx index fec084979..ee4705c0e 100644 --- a/src/SMESHGUI/SMESHGUI_Swig.cxx +++ b/src/SMESHGUI/SMESHGUI_Swig.cxx @@ -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 // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // // @@ -65,20 +65,6 @@ using namespace std; 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 { //--------------------------------------------------------------- @@ -125,11 +111,11 @@ namespace { return GetDomainRoot(theSComponentMesh, theStudyBuilder, - Tag_HypothesisRoot, + SMESH::Tag_HypothesisRoot, QObject::tr("SMESH_MEN_HYPOTHESIS"), "ICON_SMESH_TREE_HYPO"); } - + //--------------------------------------------------------------- inline @@ -139,7 +125,7 @@ namespace { return GetDomainRoot(theSComponentMesh, theStudyBuilder, - Tag_AlgorithmsRoot, + SMESH::Tag_AlgorithmsRoot, QObject::tr("SMESH_MEN_ALGORITHMS"), "ICON_SMESH_TREE_ALGO"); } @@ -157,7 +143,7 @@ namespace { SALOMEDS::SObject_var aDomain = GetDomainRoot(theSComponentMesh, theStudyBuilder, - Tag_AlgorithmsRoot, + SMESH::Tag_AlgorithmsRoot, theDomainName, theDomainPixmap); // Add New Hypothesis @@ -172,7 +158,7 @@ namespace anAttr = theStudyBuilder->FindOrCreateAttribute(aSObject,"AttributeIOR"); SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr); anIOR->SetValue(theIOR.c_str()); - + return aSObject; } @@ -186,7 +172,7 @@ namespace return AddToDomain(theIOR, theSComponentMesh, theStudyBuilder, - Tag_HypothesisRoot, + SMESH::Tag_HypothesisRoot, QObject::tr("SMESH_MEN_HYPOTHESIS"), "ICON_SMESH_TREE_HYPO"); } @@ -201,7 +187,7 @@ namespace return AddToDomain(theIOR, theSComponentMesh, theStudyBuilder, - Tag_AlgorithmsRoot, + SMESH::Tag_AlgorithmsRoot, QObject::tr("SMESH_MEN_ALGORITHMS"), "ICON_SMESH_TREE_ALGO"); } @@ -209,7 +195,7 @@ namespace //--------------------------------------------------------------- void - SetDomain(const char* theMeshOrSubMeshEntry, + SetDomain(const char* theMeshOrSubMeshEntry, const char* theDomainEntry, const SALOMEDS::Study_var& theStudy, const SALOMEDS::StudyBuilder_var& theStudyBuilder, @@ -225,7 +211,7 @@ namespace 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()); @@ -244,7 +230,7 @@ namespace //--------------------------------------------------------------- void - SetHypothesis(const char* theMeshOrSubMeshEntry, + SetHypothesis(const char* theMeshOrSubMeshEntry, const char* theDomainEntry, const SALOMEDS::Study_var& theStudy, const SALOMEDS::StudyBuilder_var& theStudyBuilder) @@ -253,7 +239,7 @@ namespace theDomainEntry, theStudy, theStudyBuilder, - Tag_RefOnAppliedHypothesis, + SMESH::Tag_RefOnAppliedHypothesis, QObject::tr("SMESH_MEN_APPLIED_HYPOTHESIS"), "ICON_SMESH_TREE_HYPO"); } @@ -261,7 +247,7 @@ namespace //--------------------------------------------------------------- void - SetAlgorithms(const char* theMeshOrSubMeshEntry, + SetAlgorithms(const char* theMeshOrSubMeshEntry, const char* theDomainEntry, const SALOMEDS::Study_var& theStudy, const SALOMEDS::StudyBuilder_var& theStudyBuilder) @@ -270,7 +256,7 @@ namespace theDomainEntry, theStudy, theStudyBuilder, - Tag_RefOnAppliedAlgorithms, + SMESH::Tag_RefOnAppliedAlgorithms, QObject::tr("SMESH_MEN_APPLIED_ALGORIHTMS"), "ICON_SMESH_TREE_ALGO"); } @@ -347,7 +333,7 @@ SMESH_Swig::Init(int theStudyID) myStudy = aStudyMgr->GetStudyByID(myStudyID); SMESH::SMESH_Gen_var aSMESHGen = SMESHGUI::GetSMESHGen(); - aSMESHGen->SetCurrentStudy( myStudy.in() ); + aSMESHGen->SetCurrentStudy( myStudy.in() ); myStudyBuilder = myStudy->NewBuilder(); @@ -358,7 +344,7 @@ SMESH_Swig::Init(int theStudyID) 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"); @@ -366,18 +352,18 @@ 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 - if(!aSMESHGUI){ + if (!aSMESHGUI){ CAM_Module* aModule = anApp->module("Mesh"); - if(!aModule) + if(!aModule) aModule = anApp->loadModule("Mesh"); - aSMESHGUI = dynamic_cast(aModule); + aSMESHGUI = dynamic_cast(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); - if(aLocked) + if (aLocked) myStudy->GetProperties()->SetLocked(true); } @@ -404,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); - if(aSObject->_is_nil()){ + if (aSObject->_is_nil()){ //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"); @@ -433,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"); - + SALOMEDS::SObject_var aSObject = ::AddHypothesis(theIOR, mySComponentMesh, myStudyBuilder); @@ -448,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"); - + SALOMEDS::SObject_var aSObject = ::AddAlgorithms(theIOR, mySComponentMesh, myStudyBuilder); @@ -462,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 ); - + 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); } } //=============================================================== -void -SMESH_Swig::SetHypothesis(const char* theMeshOrSubMeshEntry, - const char* theDomainEntry) +void SMESH_Swig::SetHypothesis(const char* theMeshOrSubMeshEntry, + const char* theDomainEntry) { ::SetHypothesis(theMeshOrSubMeshEntry, theDomainEntry, @@ -489,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, @@ -509,10 +488,9 @@ SMESH_Swig::UnSetHypothesis(const char* theDomainEntry) 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()){ @@ -520,26 +498,26 @@ SMESH_Swig::AddSubMesh(const char* theMeshEntry, QString aSubMeshName; switch(theShapeType){ case TopAbs_SOLID: - aShapeTag = Tag_SubMeshOnSolid; + aShapeTag = SMESH::Tag_SubMeshOnSolid; 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: - aShapeTag = Tag_SubMeshOnEdge; + aShapeTag = SMESH::Tag_SubMeshOnEdge; 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: - 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)){ @@ -564,11 +542,10 @@ SMESH_Swig::AddSubMesh(const char* theMeshEntry, 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()){ @@ -605,14 +582,12 @@ void SMESH_Swig::CreateAndDisplayActor( const char* Mesh_Entry ) 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; @@ -632,7 +607,7 @@ SMESH_Swig::SetName(const char* theEntry, */ //================================================================================ -void SMESH_Swig::SetMeshIcon(const char* theMeshEntry, +void SMESH_Swig::SetMeshIcon(const char* theMeshEntry, const bool theIsComputed, const bool isEmpty) { diff --git a/src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx b/src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx index 357eb8f41..0bf92e0d8 100644 --- a/src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx @@ -52,6 +52,7 @@ #include "SVTK_Selector.h" #include "SVTK_Selection.h" #include "SALOME_ListIO.hxx" +#include "SALOMEDSClient_SObject.hxx" #include "utilities.h" @@ -78,10 +79,13 @@ using namespace std; +enum { MOVE_ELEMS_BUTTON = 0, COPY_ELEMS_BUTTON, MAKE_MESH_BUTTON }; //!< action type + //================================================================================= // 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 | @@ -182,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" )); - TextLabelElements->setFixedWidth(74); + //TextLabelElements->setFixedWidth(74); GroupArgumentsLayout->addWidget(TextLabelElements, 0, 0); + //GroupArgumentsLayout->addMultiCellWidget(TextLabelElements, 0, 0, 0, 1); SelectElementsButton = new QPushButton(GroupArguments, "SelectElementsButton"); SelectElementsButton->setText(tr("" )); @@ -191,14 +196,15 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam 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->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" )); - GroupArgumentsLayout->addMultiCellWidget(CheckBoxMesh, 1, 1, 0, 2); + GroupArgumentsLayout->addMultiCellWidget(CheckBoxMesh, 1, 1, 0, 4); // Controls for mirror selection GroupMirror = new QGroupBox(GroupArguments, "GroupMirror"); @@ -251,6 +257,7 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam 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"); @@ -258,6 +265,7 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam 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"); @@ -265,18 +273,30 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam 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); - GroupArgumentsLayout->addMultiCellWidget(GroupMirror, 2, 2, 0, 2); + GroupArgumentsLayout->addMultiCellWidget(GroupMirror, 2, 2, 0, 4); - // Controls for "Create a copy" option - CheckBoxCopy = new QCheckBox(GroupArguments, "CheckBoxCopy"); - CheckBoxCopy->setText(tr("SMESH_CREATE_COPY")); - GroupArgumentsLayout->addMultiCellWidget(CheckBoxCopy, 3, 3, 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, 3, 5, 0, 3); + // 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); @@ -306,7 +326,7 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam myMeshOrSubMeshOrGroupFilter = new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR); - myHelpFileName = "/files/symmetry.htm"; + myHelpFileName = "symmetry_page.html"; Init(); @@ -331,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(ActionGroup, SIGNAL(clicked(int)), SLOT(onActionClicked(int))); this->show(); /* displays Dialog */ ConstructorsClicked(0); SelectionIntoArgument(); + onActionClicked(MOVE_ELEMS_BUTTON); resize(0,0); // ?? } @@ -375,8 +397,10 @@ void SMESHGUI_SymmetryDlg::Init (bool ResetControls) SpinBox_DY->SetValue(0.0); SpinBox_DZ->SetValue(0.0); - CheckBoxCopy->setChecked(false); + ((QRadioButton*) ActionGroup->find( MOVE_ELEMS_BUTTON ))->setChecked(TRUE); CheckBoxMesh->setChecked(false); +// MakeGroupsCheck->setChecked(false); +// MakeGroupsCheck->setEnabled(false); onSelectMesh(false); } } @@ -478,7 +502,6 @@ void SMESHGUI_SymmetryDlg::ClickOnApply() aMirror.vz = SpinBox_DZ->GetValue(); } - bool toCreateCopy = CheckBoxCopy->isChecked(); SMESH::SMESH_MeshEditor::MirrorType aMirrorType; @@ -489,15 +512,36 @@ void SMESHGUI_SymmetryDlg::ClickOnApply() 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); - 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(); + if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() || + actionButton == MAKE_MESH_BUTTON ) + mySMESHGUI->updateObjBrowser(true); // new groups may appear Init(false); ConstructorsClicked(GetConstructorId()); SelectionIntoArgument(); @@ -654,6 +698,14 @@ void SMESHGUI_SymmetryDlg::SelectionIntoArgument() 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); @@ -734,8 +786,10 @@ void SMESHGUI_SymmetryDlg::SelectionIntoArgument() } myBusy = true; - if (myEditCurrentArgument == (QWidget*)LineEditElements) + if (myEditCurrentArgument == (QWidget*)LineEditElements) { LineEditElements->setText(aString); + setNewMeshName(); + } myBusy = false; // OK @@ -927,6 +981,60 @@ void SMESHGUI_SymmetryDlg::onVectorChanged() } } +//======================================================================= +//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 : diff --git a/src/SMESHGUI/SMESHGUI_SymmetryDlg.h b/src/SMESHGUI/SMESHGUI_SymmetryDlg.h index a4c00e3b6..3f33ab4c1 100644 --- a/src/SMESHGUI/SMESHGUI_SymmetryDlg.h +++ b/src/SMESHGUI/SMESHGUI_SymmetryDlg.h @@ -81,6 +81,7 @@ private: void keyPressEvent(QKeyEvent*); int GetConstructorId(); bool IsMirrorOk(); + void setNewMeshName(); SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */ LightApp_SelectionMgr* mySelectionMgr; /* User shape selection */ @@ -128,7 +129,10 @@ private: QLabel* TextLabelDZ; SMESHGUI_SpinBox* SpinBox_DZ; - QCheckBox* CheckBoxCopy; + //QCheckBox* CheckBoxCopy; + QButtonGroup* ActionGroup; + QCheckBox* MakeGroupsCheck; + QLineEdit* LineEditNewMesh; QString myHelpFileName; @@ -146,7 +150,8 @@ private: void onTextChange(const QString&); void onSelectMesh(bool toSelectMesh); void onVectorChanged(); - + void onActionClicked(int button); + protected: QGridLayout* SMESHGUI_SymmetryDlgLayout; QGridLayout* GroupConstructorsLayout; diff --git a/src/SMESHGUI/SMESHGUI_TranslationDlg.cxx b/src/SMESHGUI/SMESHGUI_TranslationDlg.cxx index bf4fd6d98..56cae0c67 100644 --- a/src/SMESHGUI/SMESHGUI_TranslationDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_TranslationDlg.cxx @@ -52,6 +52,7 @@ #include "SVTK_ViewWindow.h" #include "SVTK_Selector.h" #include "SALOME_ListIO.hxx" +#include "SALOMEDSClient_SObject.hxx" #include "utilities.h" @@ -79,6 +80,8 @@ using namespace std; +enum { MOVE_ELEMS_BUTTON = 0, COPY_ELEMS_BUTTON, MAKE_MESH_BUTTON }; //!< action type + //================================================================================= // class : SMESHGUI_TranslationDlg() // purpose : @@ -181,7 +184,7 @@ SMESHGUI_TranslationDlg::SMESHGUI_TranslationDlg( SMESHGUI* theModule, const cha 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); @@ -256,20 +259,36 @@ SMESHGUI_TranslationDlg::SMESHGUI_TranslationDlg( SMESHGUI* theModule, const cha 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 */ - SpinBox1_1->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3); - SpinBox1_2->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3); - SpinBox1_3->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3); - SpinBox2_1->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3); - SpinBox2_2->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3); - SpinBox2_3->RangeStepAndValidator(COORD_MIN, COORD_MAX, 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); @@ -289,7 +308,7 @@ SMESHGUI_TranslationDlg::SMESHGUI_TranslationDlg( SMESHGUI* theModule, const cha myMeshOrSubMeshOrGroupFilter = new SMESH_LogicalFilter(aListOfFilters, SMESH_LogicalFilter::LO_OR); - myHelpFileName = "/files/translation.htm"; + myHelpFileName = "translation_page.html"; Init(); @@ -310,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(ActionGroup, SIGNAL(clicked(int)), SLOT(onActionClicked(int))); this->show(); /* displays Dialog */ ConstructorsClicked(0); SelectionIntoArgument(); + onActionClicked(MOVE_ELEMS_BUTTON); resize(0,0); // ?? } @@ -354,8 +375,10 @@ void SMESHGUI_TranslationDlg::Init (bool ResetControls) SpinBox2_2->SetValue(0.0); SpinBox2_3->SetValue(0.0); - CheckBoxCopy->setChecked(false); + ((QRadioButton*) ActionGroup->find( MOVE_ELEMS_BUTTON ))->setChecked(TRUE); CheckBoxMesh->setChecked(false); +// MakeGroupsCheck->setChecked(false); +// MakeGroupsCheck->setEnabled(false); onSelectMesh(false); } } @@ -452,17 +475,35 @@ void SMESHGUI_TranslationDlg::ClickOnApply() 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); - 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(); + if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() || + actionButton == MAKE_MESH_BUTTON ) + mySMESHGUI->updateObjBrowser(true); // new groups may appear Init(false); ConstructorsClicked(GetConstructorId()); SelectionIntoArgument(); @@ -619,6 +660,15 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument() 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 ); @@ -699,8 +749,10 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument() } myBusy = true; - if (myEditCurrentArgument == (QWidget*)LineEditElements) + if (myEditCurrentArgument == (QWidget*)LineEditElements) { LineEditElements->setText(aString); + setNewMeshName(); + } myBusy = false; // OK @@ -852,6 +904,60 @@ void SMESHGUI_TranslationDlg::onSelectMesh (bool toSelectMesh) 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 : diff --git a/src/SMESHGUI/SMESHGUI_TranslationDlg.h b/src/SMESHGUI/SMESHGUI_TranslationDlg.h index a70f780ae..31ebe1b5c 100644 --- a/src/SMESHGUI/SMESHGUI_TranslationDlg.h +++ b/src/SMESHGUI/SMESHGUI_TranslationDlg.h @@ -79,6 +79,7 @@ private: void hideEvent (QHideEvent*); /* ESC key */ void keyPressEvent(QKeyEvent*); int GetConstructorId(); + void setNewMeshName(); SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */ LightApp_SelectionMgr* mySelectionMgr; /* User shape selection */ @@ -123,7 +124,10 @@ private: SMESHGUI_SpinBox* SpinBox2_2; QLabel* TextLabel2_3; SMESHGUI_SpinBox* SpinBox2_3; - QCheckBox* CheckBoxCopy; + //QCheckBox* CheckBoxCopy; + QButtonGroup* ActionGroup; + QCheckBox* MakeGroupsCheck; + QLineEdit* LineEditNewMesh; QString myHelpFileName; @@ -140,6 +144,7 @@ private: void ActivateThisDialog() ; void onTextChange(const QString&); void onSelectMesh(bool toSelectMesh); + void onActionClicked(int button); protected: QGridLayout* SMESHGUI_TranslationDlgLayout; diff --git a/src/SMESHGUI/SMESHGUI_TransparencyDlg.cxx b/src/SMESHGUI/SMESHGUI_TransparencyDlg.cxx index d5c684d39..ec40570ef 100644 --- a/src/SMESHGUI/SMESHGUI_TransparencyDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_TransparencyDlg.cxx @@ -156,7 +156,7 @@ SMESHGUI_TransparencyDlg::SMESHGUI_TransparencyDlg( SMESHGUI* theModule, connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnOk())); connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(onSelectionChanged())); - myHelpFileName = "transparency.htm"; + myHelpFileName = "transparency_page.html"; this->show(); } diff --git a/src/SMESHGUI/SMESHGUI_VTKUtils.cxx b/src/SMESHGUI/SMESHGUI_VTKUtils.cxx index f924d19b7..d8144f320 100644 --- a/src/SMESHGUI/SMESHGUI_VTKUtils.cxx +++ b/src/SMESHGUI/SMESHGUI_VTKUtils.cxx @@ -24,11 +24,14 @@ #include "SMESHGUI.h" #include "SMESH_Actor.h" +#include "SMESH_ActorUtils.h" #include "SMESH_ObjectDef.h" +#include #include #include #include +#include #include #include @@ -55,9 +58,11 @@ // VTK #include #include +#include // OCCT #include +#include // STL #include @@ -69,10 +74,188 @@ namespace SMESH { typedef map 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 + ( SUIT_Session::session()->activeApplication() ); + SUIT_ViewManager* aViewManager = + app ? app->getViewManager(SVTK_Viewer::Type(), true) : 0; + if ( aViewManager ) { + QPtrVector 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 + ( 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 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(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 + ( 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 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(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!!!" < 0x060100 + OCC_CATCH_SIGNALS; +#endif TVisualObjCont::iterator anIter = VISUAL_OBJ_CONT.find(aKey); if(anIter != VISUAL_OBJ_CONT.end()){ aVisualObj = anIter->second; @@ -88,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)){ - //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)); - aVisualObj->Update(); 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(); @@ -108,13 +289,11 @@ namespace SMESH { TVisualObjPtr aVisObj = GetVisualObj(theStudyId,anEntry.in()); if(SMESH_MeshObj* aMeshObj = dynamic_cast(aVisObj.get())){ aVisualObj.reset(new SMESH_GroupObj(aGroup,aMeshObj)); - aVisualObj->Update(); 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(); @@ -125,10 +304,8 @@ namespace SMESH { TVisualObjPtr aVisObj = GetVisualObj(theStudyId,anEntry.in()); if(SMESH_MeshObj* aMeshObj = dynamic_cast(aVisObj.get())){ aVisualObj.reset(new SMESH_subMeshObj(aSubMesh,aMeshObj)); - aVisualObj->Update(); TVisualObjCont::value_type aValue(aKey,aVisualObj); VISUAL_OBJ_CONT.insert(aValue); - return aVisualObj; } } } @@ -137,7 +314,61 @@ namespace SMESH { } }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; } @@ -212,28 +443,72 @@ namespace SMESH { void RepaintCurrentView() { if (SVTK_ViewWindow* wnd = GetCurrentVtkView()) - { - wnd->getRenderer()->Render(); - wnd->Repaint(false); + { + 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) { - 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::RepaintViewWindow(SVTK_ViewWindow)" << endl; +#endif + OnVisuException(); + } } 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() ){ - wnd->onFitAll(); - wnd->Repaint(); + 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(); + } } } @@ -298,6 +573,27 @@ namespace SMESH { 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; @@ -306,8 +602,19 @@ namespace SMESH { 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(); + } } } @@ -330,17 +637,42 @@ namespace SMESH { } } + //================================================================================ + /*! + * \brief Return true if there are no SMESH actors in a view + */ + //================================================================================ + + 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(anAct)) + return false; + } + return true; + } - 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(); - switch(theAction){ + + switch (theAction) { case eDisplayAll: { - while(vtkActor *anAct = aCollection->GetNextActor()){ - if(SMESH_Actor *anActor = dynamic_cast(anAct)){ + while (vtkActor *anAct = aCollection->GetNextActor()) { + if (SMESH_Actor *anActor = dynamic_cast(anAct)) { anActor->SetVisibility(true); } } @@ -348,15 +680,15 @@ namespace SMESH { } case eDisplayOnly: case eEraseAll: { - while(vtkActor *anAct = aCollection->GetNextActor()){ - if(SMESH_Actor *anActor = dynamic_cast(anAct)){ + while (vtkActor *anAct = aCollection->GetNextActor()) { + if (SMESH_Actor *anActor = dynamic_cast(anAct)) { 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); @@ -367,30 +699,41 @@ namespace SMESH { break; } } else { - switch(theAction){ + switch (theAction) { case eDisplay: - case eDisplayOnly:{ - SalomeApp_Study* aStudy = dynamic_cast( 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(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(); - UpdateView(aWnd,theAction,theEntry); + return UpdateView(aWnd,theAction,theEntry); } void UpdateView(){ @@ -405,14 +748,16 @@ namespace SMESH { while(vtkActor *anAct = aCollection->GetNextActor()){ if(SMESH_Actor *anActor = dynamic_cast(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(); - Update(anIO,true); + if ( !Update(anIO,true) ) + break; // avoid multiple warinings if visu failed } } RepaintCurrentView(); @@ -420,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(); - 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; } @@ -468,7 +813,8 @@ namespace SMESH { 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(); iSetSelectionTolerance(SP1, SP2); + aVtkView->SetSelectionTolerance(SP1, SP2, SP3); // pre-selection aVtkView->SetPreselectionProp(aPreColor.red()/255., diff --git a/src/SMESHGUI/SMESHGUI_VTKUtils.h b/src/SMESHGUI/SMESHGUI_VTKUtils.h index b46c3f19d..dc1ed57a9 100644 --- a/src/SMESHGUI/SMESHGUI_VTKUtils.h +++ b/src/SMESHGUI/SMESHGUI_VTKUtils.h @@ -64,6 +64,8 @@ namespace SMESH { SMESHGUI_EXPORT TVisualObjPtr GetVisualObj(int theStudyId, const char* theEntry); +SMESHGUI_EXPORT + void OnVisuException(); // PAL16631 //---------------------------------------------------------------------------- SMESHGUI_EXPORT @@ -103,22 +105,24 @@ SMESHGUI_EXPORT void DisplayActor (SUIT_ViewWindow*, SMESH_Actor* theActor); SMESHGUI_EXPORT void RemoveActor (SUIT_ViewWindow*, SMESH_Actor* theActor); +SMESHGUI_EXPORT + void RemoveVisuData(int studyID); //---------------------------------------------------------------------------- enum EDisplaing {eDisplayAll, eDisplay, eDisplayOnly, eErase, eEraseAll}; SMESHGUI_EXPORT - void UpdateView (SUIT_ViewWindow*, + bool UpdateView (SUIT_ViewWindow*, EDisplaing theAction, const char* theEntry = "" ); SMESHGUI_EXPORT - void UpdateView (EDisplaing theAction, + bool UpdateView (EDisplaing theAction, const char* theEntry = ""); SMESHGUI_EXPORT void UpdateView(); SMESHGUI_EXPORT - void Update(const Handle(SALOME_InteractiveObject)& theIO, + bool Update(const Handle(SALOME_InteractiveObject)& theIO, bool theDisplay); diff --git a/src/SMESHGUI/SMESHGUI_WhatIsDlg.cxx b/src/SMESHGUI/SMESHGUI_WhatIsDlg.cxx new file mode 100755 index 000000000..d7dd9579d --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_WhatIsDlg.cxx @@ -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 +#include +#include + +// QT Includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// 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 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(IO)->_is_nil()) { + GroupMesh->setTitle(tr("SMESH_MESH")); + } else if(!SMESH::IObjectToInterface(IO)->_is_nil()) { + GroupMesh->setTitle(tr("SMESH_SUBMESH")); + } else if(!SMESH::IObjectToInterface(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( 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 index 000000000..af1c4ef3d --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_WhatIsDlg.h @@ -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 + +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 +#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 diff --git a/src/SMESHGUI/SMESHGUI_XmlHandler.cxx b/src/SMESHGUI/SMESHGUI_XmlHandler.cxx index e1ade0980..2fa20059d 100644 --- a/src/SMESHGUI/SMESHGUI_XmlHandler.cxx +++ b/src/SMESHGUI/SMESHGUI_XmlHandler.cxx @@ -130,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"; + bool isNeedGeom = true; + QString aNeedGeom = atts.value("need-geom"); + if ( !aNeedGeom.isEmpty() ) + isNeedGeom = (aNeedGeom == "true"); QString aDimStr = atts.value("dim"); aDimStr = aDimStr.remove( ' ' ); @@ -159,7 +163,7 @@ bool SMESHGUI_XmlHandler::startElement (const QString&, const QString&, HypothesisData* aHypData = 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") { diff --git a/src/SMESHGUI/SMESH_images.po b/src/SMESHGUI/SMESH_images.po index a9980d0cf..fa3443962 100644 --- a/src/SMESHGUI/SMESH_images.po +++ b/src/SMESHGUI/SMESH_images.po @@ -322,6 +322,9 @@ msgstr "advanced_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" diff --git a/src/SMESHGUI/SMESH_msg_en.po b/src/SMESHGUI/SMESH_msg_en.po index 4ef2f345a..d29cf6816 100644 --- a/src/SMESHGUI/SMESH_msg_en.po +++ b/src/SMESHGUI/SMESH_msg_en.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2007-01-19 10:44+0300\n" +"PO-Revision-Date: 2007-11-23 13:01+0300\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" @@ -51,8 +51,8 @@ msgstr "" msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2002-05-28 10:57:43 AM CEST\n" -"PO-Revision-Date: 2005-06-07 10:51+0400\n" +"POT-Creation-Date: 2002-05-28 10:46:48 AM CEST\n" +"PO-Revision-Date: 2004-10-20 17:25+0400\n" "Last-Translator: FULLNAME \n" "Content-Type: text/plain; charset=iso-8859-1\n" @@ -426,6 +426,14 @@ msgstr "Id Elements" 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" @@ -490,6 +498,14 @@ msgstr "Quadrangle" msgid "SMESH_EDGE" msgstr "Edge" +#Pyramid +msgid "SMESH_PYRAMID" +msgstr "Pyramid" + +#Prism +msgid "SMESH_PRISM" +msgstr "Prism" + #Tetrahedron msgid "SMESH_TETRAS" msgstr "Tetrahedron" @@ -498,6 +514,10 @@ msgstr "Tetrahedron" msgid "SMESH_HEXAS" msgstr "Hexahedron" +#Polyhedron +msgid "SMESH_POLYEDRON" +msgstr "Polyhedron" + #Add Triangle msgid "SMESH_ADD_TRIANGLE" msgstr "Add Triangle" @@ -798,6 +818,10 @@ msgstr "Rotation" 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 @@ -808,6 +832,10 @@ msgstr "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" @@ -986,7 +1014,7 @@ msgstr "Color group" #Check color group msgid "SMESH_CHECK_COLOR" -msgstr "Color number" +msgstr "Color" #%1 SubMeshes msgid "SMESH_SUBMESH_SELECTED" @@ -996,6 +1024,13 @@ msgstr "%1 SubMeshes" 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" @@ -1284,7 +1319,7 @@ msgid "SMESH_HYP_3" msgstr "Hypothesis has a bad parameter value" msgid "SMESH_HYP_4" -msgstr "Algorithm is hidden by an algorithm of upper dimension generating all-dimensions elements" +msgstr "Submesh is ignored as there is another algorithm of upper dimension generating %1D elements" msgid "SMESH_HYP_5" msgstr "Algorithm hides algorithm(s) of lower dimension by generating all-dimensions elements" @@ -1328,6 +1363,9 @@ 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" +msgid "STATE_HYP_BAD_GEOMETRY" +msgstr "%3 %2D algorithm \"%1\" is assigned to geometry mismatching its expectation" + msgid "GLOBAL_ALGO" msgstr "Global" @@ -1383,6 +1421,22 @@ msgstr "Select an object" 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" @@ -2200,6 +2254,9 @@ msgstr "Advanced Mesh Infos" msgid "MEN_STD_INFO" msgstr "Standard Mesh Infos" +msgid "MEN_WHAT_IS" +msgstr "Mesh Element Info" + msgid "MEN_LENGTH" msgstr "Length" @@ -2371,6 +2428,12 @@ msgstr "Shrink" 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" @@ -2476,14 +2539,14 @@ msgstr "Transparency" 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" -msgstr "Display only" +msgstr "Show only" #------ TOP -----# @@ -2562,6 +2625,9 @@ msgstr "Advanced Mesh Infos" msgid "TOP_STD_INFO" msgstr "Standard Mesh Infos" +msgid "TOP_WHAT_IS" +msgstr "Mesh Element Info" + msgid "TOP_LENGTH" msgstr "Length" @@ -2733,6 +2799,12 @@ msgstr "Shrink" 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" @@ -2787,14 +2859,14 @@ msgstr "Transparency" 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" -msgstr "Display only" +msgstr "Show only" @@ -2875,6 +2947,9 @@ msgstr "Advanced Mesh Infos" msgid "STB_STD_INFO" msgstr "Standard Mesh Infos" +msgid "STB_WHAT_IS" +msgstr "Mesh Element Info" + msgid "STB_LENGTH" msgstr "Length" @@ -3046,6 +3121,12 @@ msgstr "Shrink" 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" @@ -3100,18 +3181,14 @@ msgstr "Transparency" 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" -msgstr "Display only" - - - - +msgstr "Show only" msgid "TB_MESH" msgstr "Mesh Toolbar" @@ -3222,6 +3299,9 @@ msgstr "Nodes" msgid "SMESHGUI::PREF_ELEMENTS" msgstr "Elements" +msgid "SMESHGUI::PREF_OBJECTS" +msgstr "Objects" + msgid "SMESHGUI::PREF_DISPLAY_MODE" msgstr "Display mode" @@ -3291,6 +3371,9 @@ 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" + #----------------------------------------------------------- msgid "SMESHGUI_ShapeByMeshDlg::CAPTION" @@ -3407,6 +3490,15 @@ 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" diff --git a/src/SMESH_I/Makefile.am b/src/SMESH_I/Makefile.am index 6a8e25174..51f6177f0 100644 --- a/src/SMESH_I/Makefile.am +++ b/src/SMESH_I/Makefile.am @@ -86,6 +86,7 @@ libSMESHEngine_la_CPPFLAGS = \ @HDF5_INCLUDES@ \ $(BOOST_CPPFLAGS) \ $(KERNEL_CXXFLAGS) \ + $(GUI_CXXFLAGS) \ $(MED_CXXFLAGS) \ $(GEOM_CXXFLAGS) \ -I$(srcdir)/../Controls \ @@ -112,6 +113,8 @@ libSMESHEngine_la_LDFLAGS = \ -lSalomeGenericObj \ $(GEOM_LDFLAGS) \ -lGEOMClient \ + $(MED_LDFLAGS) \ + -lMEDWrapper_V2_2 \ $(CAS_LDPATH) \ -lTKCDF \ -lTKBO \ diff --git a/src/SMESH_I/SMESH.hxx b/src/SMESH_I/SMESH.hxx index 3025f693b..2c6558822 100644 --- a/src/SMESH_I/SMESH.hxx +++ b/src/SMESH_I/SMESH.hxx @@ -17,14 +17,14 @@ // License along with this library; if not, write to the Free Software // 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 -// $Header: +// $Header$ #ifndef _SMESH_I_SMESH_HXX_ #define _SMESH_I_SMESH_HXX_ @@ -39,28 +39,4 @@ #define SMESH_I_EXPORT #endif -// 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 // ... -}; - #endif - diff --git a/src/SMESH_I/SMESH_0D_Algo_i.hxx b/src/SMESH_I/SMESH_0D_Algo_i.hxx index 2be0029fc..354d1df44 100644 --- a/src/SMESH_I/SMESH_0D_Algo_i.hxx +++ b/src/SMESH_I/SMESH_0D_Algo_i.hxx @@ -28,6 +28,8 @@ #ifndef _SMESH_0D_ALGO_I_HXX_ #define _SMESH_0D_ALGO_I_HXX_ +#include "SMESH.hxx" + #include #include CORBA_SERVER_HEADER(SMESH_Hypothesis) @@ -36,7 +38,7 @@ // ====================================================== // Generic 0D algorithm // ====================================================== -class SMESH_0D_Algo_i: +class SMESH_I_EXPORT SMESH_0D_Algo_i: public virtual POA_SMESH::SMESH_0D_Algo, public virtual SMESH_Algo_i { diff --git a/src/SMESH_I/SMESH_2smeshpy.cxx b/src/SMESH_I/SMESH_2smeshpy.cxx index 3cd0dd18a..f933abfb7 100644 --- a/src/SMESH_I/SMESH_2smeshpy.cxx +++ b/src/SMESH_I/SMESH_2smeshpy.cxx @@ -46,6 +46,7 @@ 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); @@ -55,6 +56,7 @@ 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(_pyMeshEditor ,_pyObject); IMPLEMENT_STANDARD_RTTIEXT(_pyHypothesis ,_pyObject); IMPLEMENT_STANDARD_RTTIEXT(_pyAlgorithm ,_pyHypothesis); IMPLEMENT_STANDARD_RTTIEXT(_pyComplexParamHypo,_pyHypothesis); @@ -79,11 +81,40 @@ static TCollection_AsciiString theEmptyString; #undef DUMP_CONVERSION #endif + +namespace { + + //================================================================================ + /*! + * \brief Set of TCollection_AsciiString initialized by C array of C strings + */ + //================================================================================ + + struct TStringSet: public set + { + /*! + * \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 + * + * Class SMESH_2smeshpy declared in SMESH_PythonDump.hxx */ //================================================================================ @@ -152,6 +183,17 @@ _pyGen::_pyGen(Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod 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 @@ -182,9 +224,21 @@ Handle(_pyCommand) _pyGen::AddCommand( const TCollection_AsciiString& theCommand // 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 ); 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 ) @@ -197,7 +251,7 @@ Handle(_pyCommand) _pyGen::AddCommand( const TCollection_AsciiString& theCommand AddMeshAccessorMethod( aCommand ); // Add access to a wrapped algorithm - AddAlgoAccessorMethod( aCommand ); // ??? what if algo won't be wrapped at all ??? + // 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)) @@ -234,15 +288,26 @@ void _pyGen::Process( const Handle(_pyCommand)& theCommand ) // Concatenate( [mesh1, ...], ... ) // CreateHypothesis( theHypType, theLibName ) // Compute( mesh, geom ) - + // mesh creation if ( theCommand->GetMethod() == "CreateMesh" || - theCommand->GetMethod() == "CreateEmptyMesh" ) + theCommand->GetMethod() == "CreateEmptyMesh" || + theCommand->GetMethod() == "CreateMeshesFromUNV" || + theCommand->GetMethod() == "CreateMeshesFromSTL") { Handle(_pyMesh) mesh = new _pyMesh( theCommand ); myMeshes.insert( make_pair( mesh->GetID(), mesh )); return; } + if(theCommand->GetMethod() == "CreateMeshesFromMED") + { + for(int ind = 0;indGetNbResultValues();ind++) + { + Handle(_pyMesh) mesh = new _pyMesh( theCommand, theCommand->GetResultValue(ind)); + myMeshes.insert( make_pair( theCommand->GetResultValue(ind), mesh )); + } + } + // CreateHypothesis() if ( theCommand->GetMethod() == "CreateHypothesis" ) { @@ -272,14 +337,29 @@ void _pyGen::Process( const Handle(_pyCommand)& theCommand ) myHasPattern = true; } - // smeshgen.Method() --> smesh.smesh.Method() - theCommand->SetObject( SMESH_2smeshpy::GenName() ); - // Concatenate( [mesh1, ...], ... ) if ( theCommand->GetMethod() == "Concatenate" ) { 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() ); } //================================================================================ @@ -307,7 +387,7 @@ void _pyGen::Flush() //================================================================================ /*! - * \brief Add access method to mesh that is an object or an argument + * \brief Add access method to mesh that is an argument * \param theCmd - command to add access method * \retval bool - true if added */ @@ -372,13 +452,13 @@ Handle(_pyHypothesis) _pyGen::FindHyp( const _pyID& theHypID ) //================================================================================ 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() && - (*hyp)->GetType() == theAlgoType && + theHypothesis->CanBeCreatedBy( (*hyp)->GetAlgoType() ) && (*hyp)->GetGeom() == theGeom && (*hyp)->GetMesh() == theMesh ) return *hyp; @@ -472,7 +552,7 @@ static bool sameGroupType( const _pyID& grpID, 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() ); @@ -520,12 +600,32 @@ _pyMesh::_pyMesh(const Handle(_pyCommand) theCreationCmd): { // 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()" ); } +//================================================================================ +/*! + * \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 @@ -535,7 +635,8 @@ _pyMesh::_pyMesh(const Handle(_pyCommand) theCreationCmd): 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) @@ -543,21 +644,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="") - // 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(); + // ---------------------------------------------------------------------- if ( method == "GetSubMesh" ) { mySubmeshes.push_back( theCommand ); } + // ---------------------------------------------------------------------- else if ( method == "AddHypothesis" ) { // mesh.AddHypothesis(geom, HYPO ) myAddHypCmds.push_back( theCommand ); // set mesh to hypo @@ -569,6 +665,7 @@ void _pyMesh::Process( const Handle(_pyCommand)& theCommand ) hyp->SetMesh( this->GetID() ); } } + // ---------------------------------------------------------------------- else if ( method == "CreateGroupFromGEOM" ) {// (type, name, grp) _pyID grp = theCommand->GetArg( 3 ); if ( sameGroupType( grp, theCommand->GetArg( 1 )) ) { // --> Group(grp) @@ -580,16 +677,18 @@ void _pyMesh::Process( const Handle(_pyCommand)& 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) { - const _pyID & hypID = theCommand->GetArg( 2 ); + _pyID hypID = theCommand->GetArg( 2 ); // check if this mesh still has corresponding addition command bool hasAddCmd = false; @@ -608,63 +707,56 @@ void _pyMesh::Process( const Handle(_pyCommand)& theCommand ) } } 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 ); } - - // leave only one " mesh_editor_ = mesh.GetMeshEditor()" - else if ( theCommand->GetMethod() == "GetMeshEditor") - { - if ( myHasEditor ) - theCommand->Clear(); - else - AddMeshAccess( theCommand ); - myHasEditor = true; - } - - // apply theCommand to the mesh wrapped by smeshpy mesh + // add accessor method if necessary else { - AddMeshAccess( theCommand ); + if ( NeedMeshAccess( theCommand )) + // apply theCommand to the mesh wrapped by smeshpy mesh + AddMeshAccess( theCommand ); } } -namespace { - - //================================================================================ - /*! - * \brief add addition result treatement command - * \param addCmd - hypothesis addition command - */ - //================================================================================ +//================================================================================ +/*! + * \brief Return True if addition of accesor method is needed + */ +//================================================================================ - void addErrorTreatmentCmd( Handle(_pyCommand) & addCmd, - const bool isAlgo) - { - return; // TO DEBUD - TreatHypoStatus() is not placed right after addCmd - // addCmd: status = mesh.AddHypothesis( geom, hypo ) - // treatement command: - // def TreatHypoStatus(status, hypName, geomName, isAlgo): - TCollection_AsciiString status = addCmd->GetResultValue(); - if ( !status.IsEmpty() ) { - const _pyID& geomID = addCmd->GetArg( 1 ); - const _pyID& hypoID = addCmd->GetArg( 2 ); - TCollection_AsciiString cmdStr = addCmd->GetIndentation() + - SMESH_2smeshpy::SmeshpyName() + ".TreatHypoStatus( " + status + ", " + - SMESH_2smeshpy::SmeshpyName() + ".GetName(" + hypoID + "), " + - SMESH_2smeshpy::SmeshpyName() + ".GetName(" + geomID + "), " + - (char*)( isAlgo ? "True" : "False" ) + " )"; - Handle(_pyCommand) cmd = theGen->AddCommand( cmdStr ); - addCmd->AddDependantCmd( cmd, true ); - } - } +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() ); } //================================================================================ @@ -682,19 +774,19 @@ void _pyMesh::Flush() 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 ); + bool isLocalAlgo = ( geom != GetGeom() ); 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 ); @@ -709,15 +801,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()" ); - // add addition result treatement cmd - addErrorTreatmentCmd( addCmd, true ); + // mesh.AddHypothesis(geom, ALGO) --> mesh.AddHypothesis(ALGO, geom=0) + addCmd->RemoveArgs(); + addCmd->SetArg( 1, algoID ); + if ( isLocalAlgo ) + addCmd->SetArg( 2, geom ); } } @@ -726,24 +816,27 @@ void _pyMesh::Flush() 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; - if ( !hyp->Addition2Creation( addCmd, this->GetID() )) - { - AddMeshAccess( addCmd ); - // add addition result treatement cmd - addErrorTreatmentCmd( addCmd, false ); + 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) - 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(); @@ -753,6 +846,69 @@ void _pyMesh::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 @@ -855,25 +1011,37 @@ Handle(_pyHypothesis) _pyHypothesis::NewHypothesis( const Handle(_pyCommand)& th hyp->AddArgMethod( "SetNumberOfSegments"); hyp->AddArgMethod( "SetPythonLog10RatioFunction"); } - // 2D ---------- - else if ( hypType == "MEFISTO_2D" ) { + // MEFISTO_2D ---------- + else if ( hypType == "MEFISTO_2D" ) { // MEFISTO_2D algo->SetConvMethodAndType( "Triangle", hypType.ToCString()); } else if ( hypType == "MaxElementArea" ) { hyp->SetConvMethodAndType( "MaxElementArea", "MEFISTO_2D"); + hyp->SetConvMethodAndType( "MaxElementArea", "NETGEN_2D_ONLY"); hyp->AddArgMethod( "SetMaxElementArea"); } else if ( hypType == "LengthFromEdges" ) { hyp->SetConvMethodAndType( "LengthFromEdges", "MEFISTO_2D"); + hyp->SetConvMethodAndType( "LengthFromEdges", "NETGEN_2D_ONLY"); } + // Quadrangle_2D ---------- else if ( hypType == "Quadrangle_2D" ) { algo->SetConvMethodAndType( "Quadrangle" , hypType.ToCString()); } else if ( hypType == "QuadranglePreference" ) { hyp->SetConvMethodAndType( "QuadranglePreference", "Quadrangle_2D"); - } - // 3D ---------- - else if ( hypType == "NETGEN_3D") { + 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" ); } @@ -881,14 +1049,16 @@ Handle(_pyHypothesis) _pyHypothesis::NewHypothesis( const Handle(_pyCommand)& th hyp->SetConvMethodAndType( "MaxElementVolume", "NETGEN_3D"); hyp->AddArgMethod( "SetMaxElementVolume" ); } + // GHS3D_3D ---------- else if ( hypType == "GHS3D_3D" ) { algo->SetConvMethodAndType( "Tetrahedron", hypType.ToCString()); algo->myArgs.Append( "algo=smesh.GHS3D" ); } + // Hexa_3D --------- else if ( hypType == "Hexa_3D" ) { algo->SetConvMethodAndType( "Hexahedron", hypType.ToCString()); } - // Repetitive --------- + // Repetitive Projection_1D --------- else if ( hypType == "Projection_1D" ) { algo->SetConvMethodAndType( "Projection1D", hypType.ToCString()); } @@ -899,6 +1069,7 @@ Handle(_pyHypothesis) _pyHypothesis::NewHypothesis( const Handle(_pyCommand)& th // 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()); } @@ -908,6 +1079,7 @@ Handle(_pyHypothesis) _pyHypothesis::NewHypothesis( const Handle(_pyCommand)& th hyp->AddArgMethod( "SetSourceMesh"); hyp->AddArgMethod( "SetVertexAssociation", 4 ); } + // Projection_3D --------- else if ( hypType == "Projection_3D" ) { algo->SetConvMethodAndType( "Projection3D", hypType.ToCString()); } @@ -917,9 +1089,11 @@ Handle(_pyHypothesis) _pyHypothesis::NewHypothesis( const Handle(_pyCommand)& th 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()); } @@ -932,7 +1106,7 @@ Handle(_pyHypothesis) _pyHypothesis::NewHypothesis( const Handle(_pyCommand)& th hyp->SetConvMethodAndType( "LayerDistribution", "RadialPrism_3D"); } - if ( !algo->GetCreationMethod().IsEmpty() ) { + if ( algo->IsValid() ) { return algo; } return hyp; @@ -960,7 +1134,7 @@ bool _pyHypothesis::Addition2Creation( const Handle(_pyCommand)& theCmd, Handle(_pyHypothesis) algo; if ( !IsAlgo() ) { // find algo created on myGeom in theMesh - algo = theGen->FindAlgo( myGeom, theMesh, GetType() ); + algo = theGen->FindAlgo( myGeom, theMesh, this ); if ( algo.IsNull() ) return false; algo->GetCreationCmd()->AddDependantCmd( theCmd ); @@ -970,7 +1144,7 @@ bool _pyHypothesis::Addition2Creation( const Handle(_pyCommand)& theCmd, // mesh.AddHypothesis(geom,hyp) --> hyp = .myCreationMethod(args) theCmd->SetResultValue( GetID() ); theCmd->SetObject( IsAlgo() ? theMesh : algo->GetID()); - theCmd->SetMethod( myCreationMethod ); + theCmd->SetMethod( IsAlgo() ? GetAlgoCreationMethod() : GetCreationMethod( algo->GetAlgoType() )); // set args theCmd->RemoveArgs(); for ( int i = 1; i <= myArgs.Length(); ++i ) { @@ -1190,7 +1364,7 @@ bool _pyLayerDistributionHypo::Addition2Creation( const Handle(_pyCommand)& theA // Convert my creation => me = RadialPrismAlgo.Get3DHypothesis() // find RadialPrism algo created on for theMesh - Handle(_pyHypothesis) algo = theGen->FindAlgo( geom, theMesh, this->GetType() ); + Handle(_pyHypothesis) algo = theGen->FindAlgo( geom, theMesh, this ); if ( !algo.IsNull() ) { GetCreationCmd()->SetObject( algo->GetID() ); GetCreationCmd()->SetMethod( "Get3DHypothesis" ); @@ -1306,7 +1480,7 @@ bool _pySegmentLengthAroundVertexHyp::Addition2Creation( const Handle(_pyCommand while ( algo.IsNull() && !geom.IsEmpty()) { // try to find geom as a father of geom = FatherID( geom ); - algo = theGen->FindAlgo( geom, theMeshID, GetType() ); + algo = theGen->FindAlgo( geom, theMeshID, this ); } if ( algo.IsNull() ) return false; // also possible to find geom as brother of veretex... @@ -1427,6 +1601,54 @@ const TCollection_AsciiString & _pyCommand::GetResultValue() 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() diff --git a/src/SMESH_I/SMESH_2smeshpy.hxx b/src/SMESH_I/SMESH_2smeshpy.hxx index 2f1bc027c..cb8586f01 100644 --- a/src/SMESH_I/SMESH_2smeshpy.hxx +++ b/src/SMESH_I/SMESH_2smeshpy.hxx @@ -36,46 +36,23 @@ // =========================================================================================== /*! - * \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 - * 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 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 @@ -93,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 (_pyMeshEditor,_pyObject); DEFINE_STANDARD_HANDLE (_pyHypothesis,_pyObject); DEFINE_STANDARD_HANDLE (_pyAlgorithm ,_pyHypothesis); @@ -133,6 +111,8 @@ public: bool IsEmpty() const { return myString.IsEmpty(); } TCollection_AsciiString GetIndentation(); 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 ); @@ -198,20 +178,21 @@ public: 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 ); bool AddMeshAccessorMethod( Handle(_pyCommand) theCmd ) const; bool AddAlgoAccessorMethod( Handle(_pyCommand) theCmd ) const; - const char* AccessorMethod() const { return SMESH_2smeshpy::GenName(); } + const char* AccessorMethod() const; 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) @@ -231,32 +212,51 @@ class _pyMesh: public _pyObject 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: + static bool NeedMeshAccess( const Handle(_pyCommand)& theCommand ); 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 +// ------------------------------------------------------------------------------------- +/*! + * \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 * - * 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 */ @@ -264,41 +264,43 @@ private: class _pyHypothesis: public _pyObject { protected: - bool myIsAlgo, myIsWrapped; //myIsLocal, myIsConverted; - //int myDim/*, myAdditionCmdNb*/; - _pyID myGeom, myMesh; - TCollection_AsciiString myCreationMethod, myType; - TColStd_SequenceOfAsciiString myArgs; - TColStd_SequenceOfAsciiString myArgMethods; - TColStd_SequenceOfInteger myNbArgsByMethod; + bool myIsAlgo, myIsWrapped; + _pyID myGeom, myMesh; + // a hypothesis can be used and created by different algos by different methods + std::map 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 myArgCommands; std::list myUnknownCommands; public: _pyHypothesis(const Handle(_pyCommand)& theCreationCmd); - void SetConvMethodAndType(const char* creationMethod, const char* type=0) - { myCreationMethod = (char*)creationMethod; if ( type ) myType = (char*)type; } -// void SetDimMethodType(const int dim, const char* creationMethod, const char* type=0) -// { myDim = dim; myCreationMethod = (char*)creationMethod; if ( type ) myType = (char*)type; } + 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 TCollection_AsciiString& GetCreationMethod() const { return myCreationMethod; } const std::list& GetArgCommands() const { return myArgCommands; } void ClearAllCommands(); virtual bool IsAlgo() const { return myIsAlgo; } + bool IsValid() const { return !myType2CreationMethod.empty(); } 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 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 HasMesh() const { return !myMesh.IsEmpty(); } - // void SetGeom( const _pyID& theGeomID ) { myGeom = theGeomID; } void Process( const Handle(_pyCommand)& theCommand); void Flush(); diff --git a/src/SMESH_I/SMESH_DumpPython.cxx b/src/SMESH_I/SMESH_DumpPython.cxx index e1079ebc7..2d5d08883 100644 --- a/src/SMESH_I/SMESH_DumpPython.cxx +++ b/src/SMESH_I/SMESH_DumpPython.cxx @@ -749,6 +749,53 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl 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"; diff --git a/src/SMESH_I/SMESH_Filter_i.cxx b/src/SMESH_I/SMESH_Filter_i.cxx index d9c221ad7..bfb52b218 100644 --- a/src/SMESH_I/SMESH_Filter_i.cxx +++ b/src/SMESH_I/SMESH_Filter_i.cxx @@ -37,29 +37,27 @@ #include "SMESHDS_Mesh.hxx" +#include +#include +#include +#include +#include #include #include #include -#include -#include #include -#include +#include #include +#include #include #include -#include #include -#include -#include -#include -#include +#include +#include +#include #include #include -#include -#include -#include -#include -#include +#include 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_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; } @@ -396,48 +394,49 @@ static TopoDS_Shape getShapeByName( const char* theName ) 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(); - 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; } + } } } return TopoDS_Shape(); } -static char* getShapeNameByID ( const char* theID ) +static char* getShapeNameByID (const char* theID) { 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; } @@ -793,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(); - 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()<_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 ) @@ -1037,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(); - 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()< 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(); diff --git a/src/SMESH_I/SMESH_Gen_i.cxx b/src/SMESH_I/SMESH_Gen_i.cxx index e3b8630d8..4b0f6971d 100644 --- a/src/SMESH_I/SMESH_Gen_i.cxx +++ b/src/SMESH_I/SMESH_Gen_i.cxx @@ -126,6 +126,7 @@ 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; @@ -223,9 +224,15 @@ SALOME_LifeCycleCORBA* SMESH_Gen_i::GetLCC() { */ //============================================================================= 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; } //============================================================================= @@ -320,41 +327,41 @@ SMESH::SMESH_Hypothesis_ptr SMESH_Gen_i::createHypothesis(const char* theHypName { 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 + 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'; + 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'; + aPlatformLibName = new char[ libNameLen + 1]; + aPlatformLibName[0] = '\0'; + aPlatformLibName = strcat( aPlatformLibName, theLibName ); + aPlatformLibName[libNameLen] = '\0'; #endif - - } + } else - { - //try to use new format + { + //try to use new format #ifdef WNT - aPlatformLibName = new char[ libNameLen + 5 ]; - aPlatformLibName[0] = '\0'; - aPlatformLibName = strcat( aPlatformLibName, theLibName ); - aPlatformLibName = strcat( aPlatformLibName, ".dll" ); + 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" ); + 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); @@ -409,7 +416,7 @@ 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 = - myHypCreatorMap[string(theHypName)]->Create (myPoa, GetCurrentStudyID(), &myGen); + myHypCreatorMap[string(theHypName)]->Create(myPoa, GetCurrentStudyID(), &myGen); myHypothesis_i->SetLibName(aPlatformLibName/*theLibName*/); // for persistency assurance } catch (SALOME_Exception& S_ex) @@ -430,7 +437,7 @@ SMESH::SMESH_Hypothesis_ptr SMESH_Gen_i::createHypothesis(const char* theHypName return hypothesis_i._retn(); } - + //============================================================================= /*! * SMESH_Gen_i::createMesh @@ -479,6 +486,22 @@ GEOM_Client* SMESH_Gen_i::GetShapeReader() 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 @@ -1007,7 +1030,7 @@ SMESH::compute_error_array* SMESH_Gen_i::GetComputeErrors( SMESH::SMESH_Mesh_ptr Unexpect aCatch(SALOME_SalomeException); if(MYDEBUG) MESSAGE( "SMESH_Gen_i::GetComputeErrors()" ); - 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 ) ) @@ -1017,7 +1040,12 @@ SMESH::compute_error_array* SMESH_Gen_i::GetComputeErrors( SMESH::SMESH_Mesh_ptr try { if ( SMESH_Mesh_i* meshServant = SMESH::DownCast( theMesh )) { - TopoDS_Shape shape = GeomObjectToShape( theSubObject ); + 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() ); @@ -1072,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()" ); - 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 ) ) @@ -1083,7 +1111,12 @@ SMESH::algo_error_array* SMESH_Gen_i::GetAlgoState( SMESH::SMESH_Mesh_ptr theMes SMESH_Mesh_i* meshServant = SMESH::DownCast( 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; @@ -1201,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" ); - if ( CORBA::is_nil( theShapeObject ) ) + if ( CORBA::is_nil( theShapeObject ) && theMesh->HasShapeToMesh()) THROW_SALOME_CORBA_EXCEPTION( "bad shape object reference", SALOME::BAD_PARAM ); @@ -1212,23 +1245,27 @@ CORBA::Boolean SMESH_Gen_i::Compute( SMESH::SMESH_Mesh_ptr theMesh, // 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( 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 - 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); } } - catch ( std::bad_alloc& exc ) { - THROW_SALOME_CORBA_EXCEPTION( "Memory allocation problem", - SALOME::INTERNAL_ERROR ); + catch ( std::bad_alloc ) { + INFOS( "Compute(): lack of memory" ); } catch ( SALOME_Exception& S_ex ) { INFOS( "Compute(): catch exception "<< S_ex.what() ); @@ -1260,7 +1297,7 @@ SMESH_Gen_i::GetGeometryByMeshElement( SMESH::SMESH_Mesh_ptr theMesh, GEOM::GEOM_Object_var geom = FindGeometryByMeshElement(theMesh, theElementID); if ( !geom->_is_nil() ) { GEOM::GEOM_Object_var mainShape = theMesh->GetShapeToMesh(); - GEOM::GEOM_Gen_var geomGen = GetGeomEngine(); + GEOM::GEOM_Gen_ptr geomGen = GetGeomEngine(); // try to find the corresponding SObject SALOMEDS::SObject_var SObj = ObjectToSObject( myCurrentStudy, geom.in() ); @@ -1317,7 +1354,7 @@ SMESH_Gen_i::FindGeometryByMeshElement( SMESH::SMESH_Mesh_ptr 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( theMesh ); @@ -1326,12 +1363,33 @@ SMESH_Gen_i::FindGeometryByMeshElement( SMESH::SMESH_Mesh_ptr theMesh, ::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() ) { + // 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() ) @@ -1342,6 +1400,7 @@ SMESH_Gen_i::FindGeometryByMeshElement( SMESH::SMESH_Mesh_ptr theMesh, return geom._retn(); } } + } } return GEOM::GEOM_Object::_nil(); } @@ -1646,8 +1705,12 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent, if( libname_len > 4 ) libname.resize( libname_len - 4 ); #else - if( libname_len > 3 ) - libname.resize( libname_len - 3 ); + // 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() ) ); @@ -1711,8 +1774,12 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent, if( libname_len > 4 ) libname.resize( libname_len - 4 ); #else - if( libname_len > 3 ) - libname.resize( libname_len - 3 ); + // 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() ) ); @@ -1762,6 +1829,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent, 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 ]; @@ -1784,6 +1852,18 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent, 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->WriteOnDisk( anAutoColor ); + aDataset->CloseOnDisk(); + // write reference on a shape if exists SALOMEDS::SObject_var myRef; bool shapeRefFound = false; @@ -1807,10 +1887,10 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent, // write applied hypotheses if exist SALOMEDS::SObject_var myHypBranch; found = gotBranch->FindSubObject( GetRefOnAppliedHypothesisTag(), myHypBranch ); - if ( found && !shapeRefFound ) { // remove applied hyps + if ( found && !shapeRefFound && hasShape) { // remove applied hyps myCurrentStudy->NewBuilder()->RemoveObjectWithChildren( myHypBranch ); } - if ( found && shapeRefFound ) { + if ( found && (shapeRefFound || !hasShape) ) { aGroup = new HDFgroup( "Applied Hypotheses", aTopGroup ); aGroup->CreateOnDisk(); @@ -1850,10 +1930,10 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent, // write applied algorithms if exist SALOMEDS::SObject_var myAlgoBranch; found = gotBranch->FindSubObject( GetRefOnAppliedAlgorithmsTag(), myAlgoBranch ); - if ( found && !shapeRefFound ) { // remove applied algos + if ( found && !shapeRefFound && hasShape) { // remove applied algos myCurrentStudy->NewBuilder()->RemoveObjectWithChildren( myAlgoBranch ); } - if ( found && shapeRefFound ) { + if ( found && (shapeRefFound || !hasShape)) { aGroup = new HDFgroup( "Applied Algorithms", aTopGroup ); aGroup->CreateOnDisk(); @@ -2109,6 +2189,22 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent, aDataset->WriteOnDisk( aUserName ); aDataset->CloseOnDisk(); + // ouv : NPAL12872 + // For each group, create a dataset named "Group 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() ) ) { @@ -2162,7 +2258,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent, myWriter.Perform(); // maybe a shape was deleted in the study - if ( !shapeRefFound && !mySMESHDSMesh->ShapeToMesh().IsNull() ) { + if ( !shapeRefFound && !mySMESHDSMesh->ShapeToMesh().IsNull() && hasShape) { TopoDS_Shape nullShape; myLocMesh.ShapeToMesh( nullShape ); // remove shape referring data } @@ -2649,6 +2745,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent, } // close hypotheses root HDF group aTopGroup->CloseOnDisk(); + aTopGroup = 0; } // --> then we should read&create algorithms @@ -2748,6 +2845,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent, } // close algorithms root HDF group aTopGroup->CloseOnDisk(); + aTopGroup = 0; } // --> the rest groups should be meshes @@ -2781,6 +2879,21 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent, int newId = myStudyContext->findId( iorString ); myStudyContext->mapOldToNew( id, newId ); + // 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(); + int* anAutoColor = new int[ size ]; + aDataset->ReadFromDisk( anAutoColor ); + aDataset->CloseOnDisk(); + myNewMeshImpl->SetAutoColor( (bool)anAutoColor[0] ); + } + // try to read and set reference to shape GEOM::GEOM_Object_var aShapeObject; if ( aTopGroup->ExistInternalObject( "Ref on shape" ) ) { @@ -2886,7 +2999,8 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent, 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() ) + if ( !anHyp->_is_nil() && (!aShapeObject->_is_nil() + || !myNewMeshImpl->HasShapeToMesh()) ) myNewMeshImpl->addHypothesis( aShapeObject, anHyp ); } } @@ -2923,7 +3037,8 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent, 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() ) + if ( !anHyp->_is_nil() && (!aShapeObject->_is_nil() + || !myNewMeshImpl->HasShapeToMesh()) ) myNewMeshImpl->addHypothesis( aShapeObject, anHyp ); } } @@ -3289,9 +3404,14 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent, } // if ( hasData ) // Recompute State (as computed sub-meshes are restored from MED) - if ( !aShapeObject->_is_nil() ) { + if ( !aShapeObject->_is_nil() || !myNewMeshImpl->HasShapeToMesh()) { MESSAGE("Compute State Engine ..."); - TopoDS_Shape myLocShape = GeomObjectToShape( aShapeObject ); + 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"); @@ -3378,6 +3498,22 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent, 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 ); + } + // Fill group with contents from MED file SMESHDS_Group* aGrp = dynamic_cast( aGroupBaseDS ); if ( aGrp ) @@ -3389,7 +3525,8 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent, } } // close mesh group - aTopGroup->CloseOnDisk(); + if(aTopGroup) + aTopGroup->CloseOnDisk(); } // close HDF file aFile->CloseOnDisk(); @@ -3454,12 +3591,29 @@ void SMESH_Gen_i::Close( SALOMEDS::SComponent_ptr theComponent ) { 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 ); } + + // 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; } @@ -3552,7 +3706,7 @@ int SMESH_Gen_i::RegisterObject(CORBA::Object_ptr theObject) */ //================================================================================ -int SMESH_Gen_i::GetObjectId(CORBA::Object_ptr theObject) +CORBA::Long SMESH_Gen_i::GetObjectId(CORBA::Object_ptr theObject) { StudyContext* myStudyContext = GetCurrentStudyContext(); if ( myStudyContext && !CORBA::is_nil( theObject )) { diff --git a/src/SMESH_I/SMESH_Gen_i.hxx b/src/SMESH_I/SMESH_Gen_i.hxx index e87780cf2..d97b6fbf9 100644 --- a/src/SMESH_I/SMESH_Gen_i.hxx +++ b/src/SMESH_I/SMESH_Gen_i.hxx @@ -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 // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // // @@ -172,10 +172,12 @@ public: const char* interfaceName ); // Destructor virtual ~SMESH_Gen_i(); - + // ***************************************** // 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 ); @@ -425,7 +427,7 @@ public: int RegisterObject(CORBA::Object_ptr theObject); // Return id of registered object - int GetObjectId(CORBA::Object_ptr theObject); + CORBA::Long GetObjectId(CORBA::Object_ptr theObject); // Return an object that previously had an oldID template @@ -461,7 +463,7 @@ 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 diff --git a/src/SMESH_I/SMESH_Gen_i_1.cxx b/src/SMESH_I/SMESH_Gen_i_1.cxx index 2ff4d8874..515de4218 100644 --- a/src/SMESH_I/SMESH_Gen_i_1.cxx +++ b/src/SMESH_I/SMESH_Gen_i_1.cxx @@ -32,8 +32,7 @@ #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) @@ -58,82 +57,82 @@ static int MYDEBUG = 0; long SMESH_Gen_i::GetHypothesisRootTag() { - return Tag_HypothesisRoot; + return SMESH::Tag_HypothesisRoot; } long SMESH_Gen_i::GetAlgorithmsRootTag() { - return Tag_AlgorithmsRoot; + return SMESH::Tag_AlgorithmsRoot; } long SMESH_Gen_i::GetRefOnShapeTag() { - return Tag_RefOnShape; + return SMESH::Tag_RefOnShape; } long SMESH_Gen_i::GetRefOnAppliedHypothesisTag() { - return Tag_RefOnAppliedHypothesis; + return SMESH::Tag_RefOnAppliedHypothesis; } long SMESH_Gen_i::GetRefOnAppliedAlgorithmsTag() { - return Tag_RefOnAppliedAlgorithms; + return SMESH::Tag_RefOnAppliedAlgorithms; } long SMESH_Gen_i::GetSubMeshOnVertexTag() { - return Tag_SubMeshOnVertex; + return SMESH::Tag_SubMeshOnVertex; } long SMESH_Gen_i::GetSubMeshOnEdgeTag() { - return Tag_SubMeshOnEdge; + return SMESH::Tag_SubMeshOnEdge; } long SMESH_Gen_i::GetSubMeshOnFaceTag() { - return Tag_SubMeshOnFace; + return SMESH::Tag_SubMeshOnFace; } long SMESH_Gen_i::GetSubMeshOnSolidTag() { - return Tag_SubMeshOnSolid; + return SMESH::Tag_SubMeshOnSolid; } long SMESH_Gen_i::GetSubMeshOnCompoundTag() { - return Tag_SubMeshOnCompound; + return SMESH::Tag_SubMeshOnCompound; } long SMESH_Gen_i::GetSubMeshOnWireTag() { - return Tag_SubMeshOnWire; + return SMESH::Tag_SubMeshOnWire; } long SMESH_Gen_i::GetSubMeshOnShellTag() { - return Tag_SubMeshOnShell; + return SMESH::Tag_SubMeshOnShell; } long SMESH_Gen_i::GetNodeGroupsTag() { - return Tag_NodeGroups; + return SMESH::Tag_NodeGroups; } long SMESH_Gen_i::GetEdgeGroupsTag() { - return Tag_EdgeGroups; + return SMESH::Tag_EdgeGroups; } long SMESH_Gen_i::GetFaceGroupsTag() { - return Tag_FaceGroups; + return SMESH::Tag_FaceGroups; } long SMESH_Gen_i::GetVolumeGroupsTag() { - return Tag_VolumeGroups; + return SMESH::Tag_VolumeGroups; } //============================================================================= @@ -225,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(); - GEOM::GEOM_Gen_var aGeomEngine = GetGeomEngine(); + GEOM::GEOM_Gen_ptr aGeomEngine = GetGeomEngine(); if ( aClient && !aGeomEngine->_is_nil () ) S = aClient->GetShape( aGeomEngine, theGeomObject ); } @@ -739,10 +738,15 @@ SALOMEDS::SObject_ptr { 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(); + + 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( theMesh ); if ( !aShape.IsNull() && mesh_i && mesh_i->GetImpl().GetMeshDS() ) { @@ -772,7 +776,8 @@ bool SMESH_Gen_i::AddHypothesisToShape(SALOMEDS::Study_ptr theStudy, { 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 ); @@ -826,7 +831,8 @@ bool SMESH_Gen_i::RemoveHypothesisFromShape(SALOMEDS::Study_ptr theStudy 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 ); diff --git a/src/SMESH_I/SMESH_Group_i.cxx b/src/SMESH_I/SMESH_Group_i.cxx index 7a75b310b..9f4c705f3 100644 --- a/src/SMESH_I/SMESH_Group_i.cxx +++ b/src/SMESH_I/SMESH_Group_i.cxx @@ -419,6 +419,45 @@ GEOM::GEOM_Object_ptr SMESH_GroupOnGeom_i::GetShape() 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(); - MESSAGE("get color number of a vague group"); + MESSAGE("get color number of a group"); return 0; } @@ -443,9 +482,6 @@ void SMESH_GroupBase_i::SetColorNumber(CORBA::Long 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 ; } - - - diff --git a/src/SMESH_I/SMESH_Group_i.hxx b/src/SMESH_I/SMESH_Group_i.hxx index e6b181377..2ed372adb 100644 --- a/src/SMESH_I/SMESH_Group_i.hxx +++ b/src/SMESH_I/SMESH_Group_i.hxx @@ -75,8 +75,11 @@ class SMESH_I_EXPORT SMESH_GroupBase_i: 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; diff --git a/src/SMESH_I/SMESH_Hypothesis_i.cxx b/src/SMESH_I/SMESH_Hypothesis_i.cxx index fedc07722..28eda61b2 100644 --- a/src/SMESH_I/SMESH_Hypothesis_i.cxx +++ b/src/SMESH_I/SMESH_Hypothesis_i.cxx @@ -131,7 +131,7 @@ CORBA::Long SMESH_Hypothesis_i::GetId() ::SMESH_Hypothesis* SMESH_Hypothesis_i::GetImpl() { - MESSAGE( "SMESH_Hypothesis_i::GetImpl" ); + //MESSAGE( "SMESH_Hypothesis_i::GetImpl" ); return myBaseImpl; } diff --git a/src/SMESH_I/SMESH_MeshEditor_i.cxx b/src/SMESH_I/SMESH_MeshEditor_i.cxx index ff3eed5e8..c9f00811c 100644 --- a/src/SMESH_I/SMESH_MeshEditor_i.cxx +++ b/src/SMESH_I/SMESH_MeshEditor_i.cxx @@ -37,10 +37,17 @@ #include "SMESH_Gen_i.hxx" #include "SMESH_Filter_i.hxx" #include "SMESH_PythonDump.hxx" -#include "CASCatch.hxx" #include "utilities.h" - +#include "Utils_ExceptHandlers.hxx" +#include "Utils_CorbaException.hxx" + +#include +#include +#include +#include +#include +#include #include #include #include @@ -53,8 +60,6 @@ #ifdef NO_CAS_CATCH #include -#else -#include "CASCatch.hxx" #endif #include @@ -198,6 +203,22 @@ namespace { } } }; + + 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; + } } //============================================================================= @@ -206,9 +227,10 @@ namespace { */ //============================================================================= -SMESH_MeshEditor_i::SMESH_MeshEditor_i(SMESH_Mesh* theMesh, bool isPreview) +SMESH_MeshEditor_i::SMESH_MeshEditor_i(SMESH_Mesh_i* theMesh, bool isPreview) { - myMesh = theMesh; + myMesh_i = theMesh; + myMesh = & theMesh->GetImpl(); myPreviewMode = isPreview; } @@ -548,6 +570,185 @@ CORBA::Long SMESH_MeshEditor_i::AddPolyhedralVolumeByFaces 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( 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( 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( 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( 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(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 ); +} + + //============================================================================= /*! * @@ -622,7 +823,7 @@ CORBA::Boolean SMESH_MeshEditor_i::DeleteDiag(CORBA::Long NodeID1, bool stat = aMeshEditor.DeleteDiag ( n1, n2 ); - StoreResult(aMeshEditor); + storeResult(aMeshEditor); return stat; } @@ -687,10 +888,10 @@ namespace */ //================================================================================ - void ToMap(const SMESH::long_array & IDs, - const SMESHDS_Mesh* aMesh, - TIDSortedElemSet& aMap, - const SMDSAbs_ElementType aType = SMDSAbs_All ) + void arrayToSet(const SMESH::long_array & IDs, + const SMESHDS_Mesh* aMesh, + TIDSortedElemSet& aMap, + const SMDSAbs_ElementType aType = SMDSAbs_All ) { for (int i=0; i( SMESH_Gen_i::GetServant( Criterion ).in() ); @@ -735,7 +936,7 @@ CORBA::Boolean SMESH_MeshEditor_i::TriToQuad (const SMESH::long_array & IDsOfE bool stat = anEditor.TriToQuad( faces, aCrit, MaxAngle ); - StoreResult(anEditor); + storeResult(anEditor); return stat; } @@ -788,7 +989,7 @@ CORBA::Boolean SMESH_MeshEditor_i::QuadToTri (const SMESH::long_array & IDsOfE SMESHDS_Mesh* aMesh = GetMeshDS(); TIDSortedElemSet faces; - ToMap(IDsOfElements, aMesh, faces, SMDSAbs_Face); + arrayToSet(IDsOfElements, aMesh, faces, SMDSAbs_Face); SMESH::NumericalFunctor_i* aNumericalFunctor = dynamic_cast( SMESH_Gen_i::GetServant( Criterion ).in() ); @@ -808,7 +1009,7 @@ CORBA::Boolean SMESH_MeshEditor_i::QuadToTri (const SMESH::long_array & IDsOfE ::SMESH_MeshEditor anEditor( myMesh ); CORBA::Boolean stat = anEditor.QuadToTri( faces, aCrit ); - StoreResult(anEditor); + storeResult(anEditor); return stat; } @@ -859,7 +1060,7 @@ CORBA::Boolean SMESH_MeshEditor_i::SplitQuad (const SMESH::long_array & IDsOfEle SMESHDS_Mesh* aMesh = GetMeshDS(); TIDSortedElemSet faces; - ToMap(IDsOfElements, aMesh, faces, SMDSAbs_Face); + arrayToSet(IDsOfElements, aMesh, faces, SMDSAbs_Face); // Update Python script TPythonDump() << "isDone = " << this << ".SplitQuad( " @@ -871,7 +1072,7 @@ CORBA::Boolean SMESH_MeshEditor_i::SplitQuad (const SMESH::long_array & IDsOfEle ::SMESH_MeshEditor anEditor( myMesh ); CORBA::Boolean stat = anEditor.QuadToTri( faces, Diag13 ); - StoreResult(anEditor); + storeResult(anEditor); return stat; } @@ -1021,7 +1222,7 @@ CORBA::Boolean SMESHDS_Mesh* aMesh = GetMeshDS(); TIDSortedElemSet elements; - ToMap(IDsOfElements, aMesh, elements, SMDSAbs_Face); + arrayToSet(IDsOfElements, aMesh, elements, SMDSAbs_Face); set fixedNodes; for (int i = 0; i < IDsOfFixedNodes.length(); i++) { @@ -1038,7 +1239,7 @@ CORBA::Boolean anEditor.Smooth(elements, fixedNodes, method, MaxNbOfIterations, MaxAspectRatio, IsParametric ); - StoreResult(anEditor); + storeResult(anEditor); // Update Python script TPythonDump() << "isDone = " << this << "." @@ -1128,22 +1329,37 @@ void SMESH_MeshEditor_i::RenumberElements() GetMeshDS()->Renumber( false ); } +//======================================================================= + /*! + * \brief Return groups by their IDs + */ +//======================================================================= + +SMESH::ListOfGroups* SMESH_MeshEditor_i::getGroups(const std::list* groupIDs) +{ + if ( !groupIDs ) + return 0; + myMesh_i->CreateGroupServants(); + return myMesh_i->GetGroups( *groupIDs ); +} //======================================================================= -//function : RotationSweep -//purpose : +//function : rotationSweep +//purpose : //======================================================================= -void SMESH_MeshEditor_i::RotationSweep(const SMESH::long_array & theIDsOfElements, - const SMESH::AxisStruct & theAxis, - CORBA::Double theAngleInRadians, - CORBA::Long theNbOfSteps, - CORBA::Double theTolerance) +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; - ToMap(theIDsOfElements, GetMeshDS(), inElements); + arrayToSet(theIDsOfElements, GetMeshDS(), inElements); TIDSortedElemSet* workElements = & inElements; TPreviewMesh tmpMesh( SMDSAbs_Face ); @@ -1166,13 +1382,26 @@ void SMESH_MeshEditor_i::RotationSweep(const SMESH::long_array & theIDsOfElement gp_Vec( theAxis.vx, theAxis.vy, theAxis.vz )); ::SMESH_MeshEditor anEditor( mesh ); - anEditor.RotationSweep (*workElements, Ax1, theAngleInRadians, - theNbOfSteps, theTolerance, makeWalls); + ::SMESH_MeshEditor::PGroupIDs groupIds = + anEditor.RotationSweep (*workElements, Ax1, theAngleInRadians, + theNbOfSteps, theTolerance, theMakeGroups, makeWalls); + storeResult(anEditor); + + return theMakeGroups ? getGroups(groupIds.get()) : 0; +} - StoreResult(anEditor); +//======================================================================= +//function : RotationSweep +//purpose : +//======================================================================= +void SMESH_MeshEditor_i::RotationSweep(const SMESH::long_array & theIDsOfElements, + const SMESH::AxisStruct & theAxis, + CORBA::Double theAngleInRadians, + CORBA::Long theNbOfSteps, + CORBA::Double theTolerance) +{ if ( !myPreviewMode ) { - // Update Python script TPythonDump() << "axis = " << theAxis; TPythonDump() << this << ".RotationSweep( " << theIDsOfElements @@ -1181,6 +1410,41 @@ void SMESH_MeshEditor_i::RotationSweep(const SMESH::long_array & theIDsOfElement << theNbOfSteps << ", " << theTolerance << " )"; } + rotationSweep(theIDsOfElements, + theAxis, + theAngleInRadians, + theNbOfSteps, + theTolerance, + false); +} + +//======================================================================= +//function : RotationSweepMakeGroups +//purpose : +//======================================================================= + +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); } //======================================================================= @@ -1194,68 +1458,110 @@ void SMESH_MeshEditor_i::RotationSweepObject(SMESH::SMESH_IDSource_ptr theObject CORBA::Long theNbOfSteps, CORBA::Double theTolerance) { - initData(); - + if ( !myPreviewMode ) { + TPythonDump() << "axis = " << theAxis; + TPythonDump() << this << ".RotationSweepObject( " + << theObject + << ", axis, " + << theAngleInRadians << ", " + << theNbOfSteps << ", " + << theTolerance << " )"; + } 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) { initData(); -#ifdef NO_CAS_CATCH try { +#ifdef NO_CAS_CATCH OCC_CATCH_SIGNALS; -#else - CASCatch_TRY { #endif - SMESHDS_Mesh* aMesh = GetMeshDS(); - TIDSortedElemSet elements; - ToMap(theIDsOfElements, aMesh, elements); + arrayToSet(theIDsOfElements, GetMeshDS(), elements, theElementType); const SMESH::PointStruct * P = &theStepVector.PS; gp_Vec stepVec( P->x, P->y, P->z ); TElemOfElemListMap aHystory; ::SMESH_MeshEditor anEditor( myMesh ); - anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory); + ::SMESH_MeshEditor::PGroupIDs groupIds = + anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory, theMakeGroups); - StoreResult(anEditor); + storeResult(anEditor); - // Update Python script - TPythonDump() << "stepVector = " << theStepVector; - TPythonDump() << this << ".ExtrusionSweep( " - << theIDsOfElements << ", stepVector, " << theNbOfSteps << " )"; + return theMakeGroups ? getGroups(groupIds.get()) : 0; -#ifdef NO_CAS_CATCH } catch(Standard_Failure) { -#else - } CASCatch_CATCH(Standard_Failure) { -#endif 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 << " )"; + } } @@ -1268,18 +1574,13 @@ void SMESH_MeshEditor_i::ExtrusionSweepObject(SMESH::SMESH_IDSource_ptr theObjec const SMESH::DirStruct & theStepVector, CORBA::Long theNbOfSteps) { - initData(); - 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 << " )"; + } } //======================================================================= @@ -1291,66 +1592,139 @@ void SMESH_MeshEditor_i::ExtrusionSweepObject1D(SMESH::SMESH_IDSource_ptr theObj const SMESH::DirStruct & theStepVector, CORBA::Long theNbOfSteps) { - initData(); + 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 << " )"; + } +} - SMESHDS_Mesh* aMesh = GetMeshDS(); +//======================================================================= +//function : ExtrusionSweepObject2D +//purpose : +//======================================================================= - SMESH::long_array_var allElementsId = theObject->GetIDs(); +void SMESH_MeshEditor_i::ExtrusionSweepObject2D(SMESH::SMESH_IDSource_ptr theObject, + const SMESH::DirStruct & theStepVector, + CORBA::Long theNbOfSteps) +{ + 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 << " )"; + } +} - TIDSortedElemSet elements; - ToMap(allElementsId, aMesh, elements); +//======================================================================= +//function : ExtrusionSweepMakeGroups +//purpose : +//======================================================================= - const SMESH::PointStruct * P = &theStepVector.PS; - gp_Vec stepVec( P->x, P->y, P->z ); +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_MeshEditor anEditor( myMesh ); - //anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps); - TElemOfElemListMap aHystory; - anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory); +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 ); +} - StoreResult(anEditor); +//======================================================================= +//function : ExtrusionSweepObject1DMakeGroups +//purpose : +//======================================================================= - // Update Python script - TPythonDump() << "stepVector = " << theStepVector; - TPythonDump() << this << ".ExtrusionSweepObject1D( " - << theObject << ", stepVector, " << theNbOfSteps << " )"; +SMESH::ListOfGroups* +SMESH_MeshEditor_i::ExtrusionSweepObject1DMakeGroups(SMESH::SMESH_IDSource_ptr theObject, + const SMESH::DirStruct& theStepVector, + CORBA::Long theNbOfSteps) +{ + 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 ); } //======================================================================= -//function : ExtrusionSweepObject2D -//purpose : +//function : ExtrusionSweepObject2DMakeGroups +//purpose : //======================================================================= -void SMESH_MeshEditor_i::ExtrusionSweepObject2D(SMESH::SMESH_IDSource_ptr theObject, - const SMESH::DirStruct & theStepVector, - CORBA::Long theNbOfSteps) +SMESH::ListOfGroups* +SMESH_MeshEditor_i::ExtrusionSweepObject2DMakeGroups(SMESH::SMESH_IDSource_ptr theObject, + const SMESH::DirStruct& theStepVector, + CORBA::Long theNbOfSteps) { - initData(); + 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 ); +} - SMESHDS_Mesh* aMesh = GetMeshDS(); - SMESH::long_array_var allElementsId = theObject->GetIDs(); +//======================================================================= +//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; - ToMap(allElementsId, aMesh, elements); + arrayToSet(theIDsOfElements, GetMeshDS(), 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); - - StoreResult(anEditor); + ::SMESH_MeshEditor::PGroupIDs groupIds = + anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory, + theMakeGroups, theExtrFlags, theSewTolerance); + storeResult(anEditor); - // Update Python script - TPythonDump() << "stepVector = " << theStepVector; - TPythonDump() << this << ".ExtrusionSweepObject2D( " - << theObject << ", stepVector, " << theNbOfSteps << " )"; + return theMakeGroups ? getGroups(groupIds.get()) : 0; } - //======================================================================= //function : AdvancedExtrusion //purpose : @@ -1362,34 +1736,59 @@ void SMESH_MeshEditor_i::AdvancedExtrusion(const SMESH::long_array & theIDsOfEle CORBA::Long theExtrFlags, CORBA::Double theSewTolerance) { - initData(); - - SMESHDS_Mesh* aMesh = GetMeshDS(); - - TIDSortedElemSet elements; - ToMap(theIDsOfElements, aMesh, elements); - - const SMESH::PointStruct * P = &theStepVector.PS; - gp_Vec stepVec( P->x, P->y, P->z ); - - ::SMESH_MeshEditor anEditor( myMesh ); - TElemOfElemListMap aHystory; - anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory, - theExtrFlags, theSewTolerance); + if ( !myPreviewMode ) { + TPythonDump() << "stepVector = " << theStepVector; + TPythonDump() << this << ".AdvancedExtrusion(" + << theIDsOfElements + << ", stepVector, " + << theNbOfSteps << "," + << theExtrFlags << ", " + << theSewTolerance << " )"; + } + advancedExtrusion( theIDsOfElements, + theStepVector, + theNbOfSteps, + theExtrFlags, + theSewTolerance, + false); +} - StoreResult(anEditor); +//======================================================================= +//function : AdvancedExtrusionMakeGroups +//purpose : +//======================================================================= - // Update Python script - TPythonDump() << "stepVector = " << theStepVector; - TPythonDump() << this << ".AdvancedExtrusion(" - << theIDsOfElements - << ", stepVector, " - << theNbOfSteps << "," - << theExtrFlags << ", " - << theSewTolerance << " )"; +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; static SMESH::SMESH_MeshEditor::Extrusion_Error convExtrError( const::SMESH_MeshEditor::Extrusion_Error e ) @@ -1406,41 +1805,48 @@ static SMESH::SMESH_MeshEditor::Extrusion_Error convExtrError( const::SMESH_Mesh 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) { 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( thePathMesh ); - SMESH_Mesh_i* aMeshImp = dynamic_cast( SMESH_Gen_i::GetServant( thePathMesh ).in() ); 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); - if ( !nodeStart ) - return SMESH::SMESH_MeshEditor::EXTR_BAD_STARTING_NODE; + if ( !nodeStart ) { + theError = SMESH::SMESH_MeshEditor::EXTR_BAD_STARTING_NODE; + return 0; + } TIDSortedElemSet elements; - ToMap(theIDsOfElements, aMesh, elements); + arrayToSet(theIDsOfElements, GetMeshDS(), elements); list angles; for (int i = 0; i < theAngles.length(); i++) { @@ -1449,35 +1855,73 @@ SMESH::SMESH_MeshEditor::Extrusion_Error gp_Pnt refPnt( theRefPoint.x, theRefPoint.y, theRefPoint.z ); - // Update Python script - TPythonDump() << "rotAngles = " << theAngles; - - if ( theHasRefPoint ) - TPythonDump() << "refPoint = SMESH.PointStruct( " - << refPnt.X() << ", " - << refPnt.Y() << ", " - << refPnt.Z() << " )"; - else - TPythonDump() << "refPoint = SMESH.PointStruct( 0,0,0 )"; - - TPythonDump() << "error = " << this << ".ExtrusionAlongPath( " - << theIDsOfElements << ", " - << thePathMesh << ", " - << thePathShape << ", " - << theNodeStart << ", " - << theHasAngles << ", " - << "rotAngles" << ", " - << theHasRefPoint << ", refPoint )"; + int nbOldGroups = myMesh->NbGroup(); ::SMESH_MeshEditor anEditor( myMesh ); - SMESH::SMESH_MeshEditor::Extrusion_Error error = - convExtrError( anEditor.ExtrusionAlongTrack( elements, aSubMesh, nodeStart, - theHasAngles, angles, - theHasRefPoint, refPnt ) ); + ::SMESH_MeshEditor::Extrusion_Error error = + anEditor.ExtrusionAlongTrack( elements, aSubMesh, nodeStart, + theHasAngles, angles, + theHasRefPoint, refPnt, theMakeGroups ); + storeResult(anEditor); + theError = convExtrError( error ); + + if ( theMakeGroups ) { + list groupIDs = myMesh->GetGroupIds(); + list::iterator newBegin = groupIDs.begin(); + std::advance( newBegin, nbOldGroups ); // skip old groups + groupIDs.erase( groupIDs.begin(), newBegin ); + return getGroups( & groupIDs ); + } + return 0; +} - StoreResult(anEditor); +//======================================================================= +//function : ExtrusionAlongPath +//purpose : +//======================================================================= - return error; +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; } //======================================================================= @@ -1495,29 +1939,137 @@ SMESH_MeshEditor_i::ExtrusionAlongPathObject(SMESH::SMESH_IDSource_ptr theObje CORBA::Boolean theHasRefPoint, const SMESH::PointStruct & theRefPoint) { - initData(); + 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::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() << "rotAngles = " << theAngles; - TPythonDump() << "error = " << this << ".ExtrusionAlongPathObject( " - << theObject << ", " - << thePathMesh << ", " - << thePathShape << ", " - << theNodeStart << ", " - << theHasAngles << ", " - << "rotAngles" << ", " - << 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 : ExtrusionAlongPathObjectMakeGroups +//purpose : +//======================================================================= + +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) +{ + 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); } //================================================================================ @@ -1540,55 +2092,68 @@ SMESH_MeshEditor_i::LinearAnglesVariation(SMESH::SMESH_Mesh_ptr thePathMes return aResult._retn(); } + //======================================================================= -//function : Mirror -//purpose : +//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) +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(); - SMESHDS_Mesh* aMesh = GetMeshDS(); - TIDSortedElemSet elements; - ToMap(theIDsOfElements, aMesh, 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; - TCollection_AsciiString typeStr; 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 )); - typeStr = "SMESH.SMESH_MeshEditor.AXIS"; 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::PGroupIDs groupIds = + anEditor.Transform (elements, aTrsf, theCopy, theMakeGroups, theTargetMesh); if(theCopy) { - StoreResult(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); } @@ -1602,68 +2167,173 @@ void SMESH_MeshEditor_i::MirrorObject(SMESH::SMESH_IDSource_ptr theObj SMESH::SMESH_MeshEditor::MirrorType theMirrorType, CORBA::Boolean theCopy) { - initData(); + 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(); - 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( mesh )) + { + mirror(theIDsOfElements, theMirror, theMirrorType, + false, theCopyGroups, & mesh_i->GetImpl()); + mesh_i->CreateGroupServants(); + } + + if ( !myPreviewMode ) { + pydump << mesh << " = " << this << ".MirrorMakeMesh( " + << theIDsOfElements << ", " + << theMirror << ", " + << mirrorTypeName(theMirrorType) << ", " + << theCopyGroups << ", '" + << theMeshName << "' )"; } - TPythonDump() << "axis = " << theAxis; - TPythonDump() << this << ".MirrorObject( " - << theObject << ", " - << "axis, " - << typeStr << ", " - << theCopy << " )"; + 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) { - initData(); + 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( 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(); +} + +//======================================================================= +//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; - ToMap(theIDsOfElements, aMesh, elements); + arrayToSet(theIDsOfElements, GetMeshDS(), elements); 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::PGroupIDs groupIds = + anEditor.Transform (elements, aTrsf, theCopy, theMakeGroups, theTargetMesh); - if(theCopy) { - StoreResult(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); } //======================================================================= @@ -1675,38 +2345,132 @@ void SMESH_MeshEditor_i::TranslateObject(SMESH::SMESH_IDSource_ptr theObject, const SMESH::DirStruct & theVector, CORBA::Boolean theCopy) { - initData(); + 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(); - 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( 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) { - initData(); + TPythonDump pydump; // to prevent dump at mesh creation + SMESH::SMESH_Mesh_var mesh = makeMesh( theMeshName ); - SMESHDS_Mesh* aMesh = GetMeshDS(); + if ( SMESH_Mesh_i* mesh_i = SMESH::DownCast( 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(); +} + +//======================================================================= +//function : rotate +//purpose : +//======================================================================= + +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; - ToMap(theIDsOfElements, aMesh, elements); + arrayToSet(theIDsOfElements, GetMeshDS(), elements); gp_Pnt P ( theAxis.x, theAxis.y, theAxis.z ); gp_Vec V ( theAxis.vx, theAxis.vy, theAxis.vz ); @@ -1715,19 +2479,38 @@ void SMESH_MeshEditor_i::Rotate(const SMESH::long_array & theIDsOfElements, aTrsf.SetRotation( gp_Ax1( P, V ), theAngle); ::SMESH_MeshEditor anEditor( myMesh ); - anEditor.Transform (elements, aTrsf, theCopy); + ::SMESH_MeshEditor::PGroupIDs groupIds = + anEditor.Transform (elements, aTrsf, theCopy, theMakeGroups, theTargetMesh); if(theCopy) { - StoreResult(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); } //======================================================================= @@ -1740,21 +2523,124 @@ void SMESH_MeshEditor_i::RotateObject(SMESH::SMESH_IDSource_ptr theObject, CORBA::Double theAngle, CORBA::Boolean theCopy) { - initData(); + 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(); - 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( 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( 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(); } //======================================================================= @@ -1778,12 +2664,11 @@ 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();; - 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(); } - // Update Python script TPythonDump() << "coincident_nodes = " << this << ".FindCoincidentNodes( " << Tolerance << " )"; } @@ -1835,12 +2720,11 @@ void SMESH_MeshEditor_i::FindCoincidentNodesOnPart(SMESH::SMESH_IDSource_ptr 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(); } - // Update Python script TPythonDump() << "coincident_nodes_on_part = " << this << ".FindCoincidentNodesOnPart( " <MoveNode(node, x, y, z); // fill preview data ::SMESH_MeshEditor anEditor( & tmpMesh ); - StoreResult( anEditor ); + storeResult( anEditor ); } else { @@ -2043,7 +2923,6 @@ CORBA::Long SMESH_MeshEditor_i::MoveClosestNodeToPoint(CORBA::Double x, } if ( !myPreviewMode ) { - // Update Python script TPythonDump() << "nodeID = " << this << ".MoveClosestNodeToPoint( "<< x << ", " << y << ", " << z << " )"; } @@ -2110,7 +2989,6 @@ SMESH::SMESH_MeshEditor::Sew_Error !aSide2ThirdNode) return SMESH::SMESH_MeshEditor::SEW_BORDER2_NOT_FOUND; - // Update Python script TPythonDump() << "error = " << this << ".SewFreeBorders( " << FirstNodeID1 << ", " << SecondNodeID1 << ", " @@ -2133,7 +3011,7 @@ SMESH::SMESH_MeshEditor::Sew_Error CreatePolygons, CreatePolyedrs) ); - StoreResult(anEditor); + storeResult(anEditor); return error; } @@ -2170,7 +3048,6 @@ SMESH_MeshEditor_i::SewConformFreeBorders(CORBA::Long FirstNodeID1, !aSide2SecondNode) return SMESH::SMESH_MeshEditor::SEW_BORDER2_NOT_FOUND; - // Update Python script TPythonDump() << "error = " << this << ".SewConformFreeBorders( " << FirstNodeID1 << ", " << SecondNodeID1 << ", " @@ -2189,7 +3066,7 @@ SMESH_MeshEditor_i::SewConformFreeBorders(CORBA::Long FirstNodeID1, true, false, false) ); - StoreResult(anEditor); + storeResult(anEditor); return error; } @@ -2228,7 +3105,6 @@ SMESH_MeshEditor_i::SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder, !aSide2SecondNode) return SMESH::SMESH_MeshEditor::SEW_BAD_SIDE_NODES; - // Update Python script TPythonDump() << "error = " << this << ".SewBorderToSide( " << FirstNodeIDOnFreeBorder << ", " << SecondNodeIDOnFreeBorder << ", " @@ -2250,7 +3126,7 @@ SMESH_MeshEditor_i::SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder, CreatePolygons, CreatePolyedrs) ); - StoreResult(anEditor); + storeResult(anEditor); return error; } @@ -2286,10 +3162,9 @@ SMESH_MeshEditor_i::SewSideElements(const SMESH::long_array& IDsOfSide1Elements, return SMESH::SMESH_MeshEditor::SEW_BAD_SIDE2_NODES; TIDSortedElemSet aSide1Elems, aSide2Elems; - ToMap(IDsOfSide1Elements, aMesh, aSide1Elems); - ToMap(IDsOfSide2Elements, aMesh, aSide2Elems); + arrayToSet(IDsOfSide1Elements, aMesh, aSide1Elems); + arrayToSet(IDsOfSide2Elements, aMesh, aSide2Elems); - // Update Python script TPythonDump() << "error = " << this << ".SewSideElements( " << IDsOfSide1Elements << ", " << IDsOfSide2Elements << ", " @@ -2306,7 +3181,7 @@ SMESH_MeshEditor_i::SewSideElements(const SMESH::long_array& IDsOfSide1Elements, aSecondNode1ToMerge, aSecondNode2ToMerge)); - StoreResult(anEditor); + storeResult(anEditor); return error; } @@ -2330,7 +3205,7 @@ CORBA::Boolean SMESH_MeshEditor_i::ChangeElemNodes(CORBA::Long ide, int nbn = newIDs.length(); int i=0; - vector aNodes (nbn); + vector aNodes(nbn); int nbn1=-1; for(; iFindNode(newIDs[i]); @@ -2339,14 +3214,13 @@ CORBA::Boolean SMESH_MeshEditor_i::ChangeElemNodes(CORBA::Long ide, aNodes[nbn1] = aNode; } } - // Update Python script TPythonDump() << "isDone = " << this << ".ChangeElemNodes( " << ide << ", " << newIDs << " )"; #ifdef _DEBUG_ TPythonDump() << "print 'ChangeElemNodes: ', isDone"; #endif - return GetMeshDS()->ChangeElementNodes( elem, &aNodes[0], nbn1+1 ); + return GetMeshDS()->ChangeElementNodes( elem, & aNodes[0], nbn1+1 ); } //================================================================================ @@ -2356,7 +3230,7 @@ CORBA::Boolean SMESH_MeshEditor_i::ChangeElemNodes(CORBA::Long ide, */ //================================================================================ -void SMESH_MeshEditor_i::StoreResult(::SMESH_MeshEditor& anEditor) +void SMESH_MeshEditor_i::storeResult(::SMESH_MeshEditor& anEditor) { if ( myPreviewMode ) { // --- MeshPreviewStruct filling --- @@ -2493,20 +3367,39 @@ void SMESH_MeshEditor_i::ConvertToQuadratic(CORBA::Boolean theForce3d) { ::SMESH_MeshEditor anEditor( myMesh ); anEditor.ConvertToQuadratic(theForce3d); - // Update Python script TPythonDump() << this << ".ConvertToQuadratic( " << theForce3d << " )"; } //======================================================================= //function : ConvertFromQuadratic -//purpose : +//purpose : //======================================================================= CORBA::Boolean SMESH_MeshEditor_i::ConvertFromQuadratic() { ::SMESH_MeshEditor anEditor( myMesh ); CORBA::Boolean isDone = anEditor.ConvertFromQuadratic(); - // Update Python script 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(); +} diff --git a/src/SMESH_I/SMESH_MeshEditor_i.hxx b/src/SMESH_I/SMESH_MeshEditor_i.hxx index 52ba2d776..85d7b6cfd 100644 --- a/src/SMESH_I/SMESH_MeshEditor_i.hxx +++ b/src/SMESH_I/SMESH_MeshEditor_i.hxx @@ -36,12 +36,15 @@ #include "SMESH_Mesh.hxx" +#include + class SMESH_MeshEditor; +class SMESH_Mesh_i; -class SMESH_I_EXPORT SMESH_MeshEditor_i: public POA_SMESH::SMESH_MeshEditor +class SMESH_MeshEditor_i: public POA_SMESH::SMESH_MeshEditor { public: - SMESH_MeshEditor_i(SMESH_Mesh * theMesh, bool isPreview); + SMESH_MeshEditor_i(SMESH_Mesh_i * theMesh, bool isPreview); virtual ~ SMESH_MeshEditor_i(); @@ -62,6 +65,48 @@ class SMESH_I_EXPORT SMESH_MeshEditor_i: public POA_SMESH::SMESH_MeshEditor 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); @@ -204,14 +249,105 @@ class SMESH_I_EXPORT SMESH_MeshEditor_i: public POA_SMESH::SMESH_MeshEditor 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 FindCoincidentNodesOnPart(SMESH::SMESH_IDSource_ptr theObject, + 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 FindEqualElements(SMESH::SMESH_IDSource_ptr theObject, - SMESH::array_of_long_array_out GroupsOfElementsID); + 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(); CORBA::Long MoveClosestNodeToPoint(CORBA::Double x, @@ -222,35 +358,35 @@ class SMESH_I_EXPORT SMESH_MeshEditor_i: public POA_SMESH::SMESH_MeshEditor 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 - 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 - 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 - 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. @@ -278,27 +414,82 @@ class SMESH_I_EXPORT SMESH_MeshEditor_i: public POA_SMESH::SMESH_MeshEditor */ SMESH::long_array* GetLastCreatedElems(); - // - // Internal methods - // - - /*! - * \brief Update myLastCreated* or myPreviewData - * \param anEditor - it contains edition results - */ - void StoreResult(::SMESH_MeshEditor& anEditor); - /*! * \brief Return edited mesh ID * \retval int - mesh ID */ int GetMeshId() const { return myMesh->GetId(); } - private: + +private: //!< private methods SMESHDS_Mesh * GetMeshDS() { return myMesh->GetMeshDS(); } + + /*! + * \brief Update myLastCreated* or myPreviewData + * \param anEditor - it contains edition results + */ + void storeResult(::SMESH_MeshEditor& anEditor); + /*! + * \brief Clear myLastCreated* or myPreviewData + */ void initData(); + /*! + * \brief Return groups by their IDs + */ + SMESH::ListOfGroups* getGroups(const std::list* 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; diff --git a/src/SMESH_I/SMESH_Mesh_i.cxx b/src/SMESH_I/SMESH_Mesh_i.cxx index 76e5a9821..32e8ee2bc 100644 --- a/src/SMESH_I/SMESH_Mesh_i.cxx +++ b/src/SMESH_I/SMESH_Mesh_i.cxx @@ -27,39 +27,46 @@ // $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_Gen_i.hxx" +#include "SMESH_Group_i.hxx" +#include "SMESH_MEDMesh_i.hxx" +#include "SMESH_MeshEditor_i.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 "SMDS_ElemIterator.hxx" +#include "DriverMED_W_SMESHDS_Mesh.h" #include "SMDS_VolumeTool.hxx" -#include "SMESH_MesherHelper.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 "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 -#include -#include +#include #include +#include +#include #include -#include #include +#include #include -#include "TCollection_AsciiString.hxx" +#include +#include +#include // STL Includes #include @@ -224,7 +231,7 @@ SMESH_Mesh_i::ImportMEDFile( const char* theFileName, const char* theMeshName ) 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); @@ -233,19 +240,24 @@ SMESH_Mesh_i::ImportMEDFile( const char* theFileName, const char* theMeshName ) 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::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); } +//================================================================================ +/*! + * \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 @@ -262,16 +274,6 @@ int SMESH_Mesh_i::ImportUNVFile( const char* theFileName ) 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::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; } @@ -299,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 = 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 = and all its groups into SMESH_Mesh +// int status = _impl->MEDToMesh( theFileName, theMeshName ); +// CreateGroupServants(); - return status; -} +// return status; +// } //============================================================================= /*! @@ -362,9 +364,14 @@ SMESH::Hypothesis_Status SMESH_Mesh_i::AddHypothesis(GEOM::GEOM_Object_ptr aSubS 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); } @@ -380,7 +387,7 @@ SMESH_Hypothesis::Hypothesis_Status { 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); @@ -392,7 +399,13 @@ SMESH_Hypothesis::Hypothesis_Status 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) ) { @@ -430,8 +443,15 @@ SMESH::Hypothesis_Status SMESH_Mesh_i::RemoveHypothesis(GEOM::GEOM_Object_ptr aS aSubShapeObject, anHyp ); // Update Python script + // Update Python script + if(_impl->HasShapeToMesh()) { TPythonDump() << "status = " << _this() << ".RemoveHypothesis( " << aSubShapeObject << ", " << anHyp << " )"; + } + else { + TPythonDump() << "status = " << _this() << ".RemoveHypothesis( " + << anHyp << " )"; + } return ConvertHypothesisStatus(status); } @@ -448,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 (CORBA::is_nil(aSubShapeObject)) + if (CORBA::is_nil(aSubShapeObject) && HasShapeToMesh()) THROW_SALOME_CORBA_EXCEPTION("bad subShape reference", SALOME::BAD_PARAM); @@ -460,8 +480,14 @@ SMESH_Hypothesis::Hypothesis_Status SMESH_Mesh_i::removeHypothesis(GEOM::GEOM_Ob 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 ); @@ -785,6 +811,17 @@ SMESH::ListOfGroups * SMESH_Mesh_i::GetGroups() throw(SALOME::SALOME_Exception) 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 @@ -956,6 +993,139 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::CutGroups( SMESH::SMESH_GroupBase_ptr theGr 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 & 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::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::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::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 hyps = _impl->GetHypothesisList(oldGroupShape); + list ::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 ); + } + } + } +} + //============================================================================= /*! * @@ -1211,7 +1381,7 @@ void SMESH_Mesh_i::SetImpl(::SMESH_Mesh * impl) SMESH::SMESH_MeshEditor_ptr SMESH_Mesh_i::GetMeshEditor() { // Create MeshEditor - SMESH_MeshEditor_i *aMeshEditor = new SMESH_MeshEditor_i( _impl, false ); + SMESH_MeshEditor_i *aMeshEditor = new SMESH_MeshEditor_i( this, false ); SMESH::SMESH_MeshEditor_var aMesh = aMeshEditor->_this(); // Update Python script @@ -1228,11 +1398,34 @@ SMESH::SMESH_MeshEditor_ptr SMESH_Mesh_i::GetMeshEditor() SMESH::SMESH_MeshEditor_ptr SMESH_Mesh_i::GetMeshEditPreviewer() { - SMESH_MeshEditor_i *aMeshEditor = new SMESH_MeshEditor_i( _impl, true ); + 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 @@ -1426,7 +1619,7 @@ CORBA::Long SMESH_Mesh_i::NbEdgesOfOrder(SMESH::ElementOrder order) throw(SALOME::SALOME_Exception) { Unexpect aCatch(SALOME_SalomeException); - return _impl->NbEdges( (::SMESH_Mesh::ElementOrder) order); + return _impl->NbEdges( (SMDSAbs_ElementOrder) order); } //============================================================================= @@ -1462,21 +1655,21 @@ CORBA::Long SMESH_Mesh_i::NbFacesOfOrder(SMESH::ElementOrder order) 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); - 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); - return _impl->NbQuadrangles( (::SMESH_Mesh::ElementOrder) order); + return _impl->NbQuadrangles( (SMDSAbs_ElementOrder) order); } //============================================================================= @@ -1524,35 +1717,35 @@ CORBA::Long SMESH_Mesh_i::NbVolumesOfOrder(SMESH::ElementOrder order) 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); - 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); - 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); - 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); - return _impl->NbPrisms( (::SMESH_Mesh::ElementOrder) order); + return _impl->NbPrisms( (SMDSAbs_ElementOrder) order); } //============================================================================= @@ -1884,6 +2077,56 @@ SMESH::long_array* SMESH_Mesh_i::GetNodeInverseElements(const CORBA::Long id) 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( pos.get() )->GetUParameter(); + break; + case SMDS_TOP_FACE: + aNodePosition->shapeType = GEOM::FACE; + aNodePosition->params.length(2); + aNodePosition->params[0] = + static_cast( pos.get() )->GetUParameter(); + aNodePosition->params[1] = + static_cast( 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; +} //============================================================================= /*! @@ -2131,17 +2374,11 @@ SMESH::double_array* SMESH_Mesh_i::BaryCenter(const CORBA::Long id) return aResult._retn(); if(elem->GetType()==SMDSAbs_Volume) { - // use SMDS_VolumeTool 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 { @@ -2170,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() { - // Create group servants, if any groups were imported - list aGroupIds = _impl->GetGroupIds(); - for ( list::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::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( 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(); - // 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 - int nextId = _gen_i->RegisterObject( aGroup ); + int nextId = _gen_i->RegisterObject( groupVar ); 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& groupIDs) const +{ + int nbGroups = groupIDs.size(); + SMESH::ListOfGroups_var aList = new SMESH::ListOfGroups(); + aList->length( nbGroups ); + + list::const_iterator ids = groupIDs.begin(); + for ( nbGroups = 0; ids != groupIDs.end(); ++ids ) + { + map::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(); +} diff --git a/src/SMESH_I/SMESH_Mesh_i.hxx b/src/SMESH_I/SMESH_Mesh_i.hxx index af50b569b..d76ade836 100644 --- a/src/SMESH_I/SMESH_Mesh_i.hxx +++ b/src/SMESH_I/SMESH_Mesh_i.hxx @@ -40,13 +40,14 @@ #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; +class SMESH_subMesh_i; #include @@ -107,6 +108,9 @@ public: 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 ) @@ -159,10 +163,23 @@ public: 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(); + /*! + * 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); @@ -293,7 +310,7 @@ public: static SMESH::Hypothesis_Status ConvertHypothesisStatus (SMESH_Hypothesis::Hypothesis_Status theStatus); - int importMEDFile( const char* theFileName, const char* theMeshName ); + //int importMEDFile( const char* theFileName, const char* theMeshName ); SMESH::SMESH_subMesh_ptr createSubMesh( GEOM::GEOM_Object_ptr theSubShapeObject ); @@ -312,10 +329,26 @@ public: const map& 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(); 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& groupIDs) const; /*! * Get XYZ coordinates of node as list of double @@ -329,6 +362,11 @@ public: */ 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 there is not node for given ID - returns -1 @@ -403,7 +441,6 @@ public: map _mapSubMesh; //NRI private: - void CreateGroupServants(); static int myIdGenerator; ::SMESH_Mesh* _impl; // :: force no namespace here diff --git a/src/SMESH_I/SMESH_Pattern_i.cxx b/src/SMESH_I/SMESH_Pattern_i.cxx index 13ed3ac89..4f730b387 100644 --- a/src/SMESH_I/SMESH_Pattern_i.cxx +++ b/src/SMESH_I/SMESH_Pattern_i.cxx @@ -40,6 +40,9 @@ #include #include +#include +#include + #include #include @@ -286,8 +289,24 @@ SMESH::point_array* if ( elem && elem->GetType() == SMDSAbs_Face ) fset.insert( static_cast( 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::iterator xyzIt = xyzList.begin(); diff --git a/src/SMESH_I/SMESH_PythonDump.hxx b/src/SMESH_I/SMESH_PythonDump.hxx index 6e65a3d41..518e1be92 100644 --- a/src/SMESH_I/SMESH_PythonDump.hxx +++ b/src/SMESH_I/SMESH_PythonDump.hxx @@ -31,6 +31,37 @@ 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 { @@ -39,6 +70,12 @@ namespace SMESH class Filter_i; class Functor_i; +// =========================================================================================== +/*! + * \brief Utility helping in storing SMESH engine calls as python commands + */ +// =========================================================================================== + class SMESH_I_EXPORT TPythonDump { std::ostringstream myStream; @@ -144,5 +181,4 @@ namespace SMESH }; } - #endif diff --git a/src/SMESH_I/SMESH_subMesh_i.cxx b/src/SMESH_I/SMESH_subMesh_i.cxx index 4df569cb6..f0fbc25b3 100644 --- a/src/SMESH_I/SMESH_subMesh_i.cxx +++ b/src/SMESH_I/SMESH_subMesh_i.cxx @@ -35,9 +35,8 @@ #include "OpUtil.hxx" #include "Utils_ExceptHandlers.hxx" -#include -#include #include +#include using namespace std; @@ -458,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(); - if ( !S.IsNull() ) + if ( !S.IsNull() ) { 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) { diff --git a/src/SMESH_I/SMESH_subMesh_i.hxx b/src/SMESH_I/SMESH_subMesh_i.hxx index 808b07cb6..154ffd7a2 100644 --- a/src/SMESH_I/SMESH_subMesh_i.hxx +++ b/src/SMESH_I/SMESH_subMesh_i.hxx @@ -38,6 +38,7 @@ #include CORBA_CLIENT_HEADER(MED) #include "SALOME_GenericObj_i.hh" +#include "SMESH_Mesh_i.hxx" class SMESH_Gen_i; class SMESH_Mesh_i; @@ -91,8 +92,11 @@ public: SMESH_Mesh_i* _mesh_i; //NRI protected: + void changeLocalId(int localId) { _localId = localId; } SMESH_Gen_i* _gen_i; int _localId; + + friend void SMESH_Mesh_i::CheckGeomGroupModif(); }; #endif diff --git a/src/SMESH_SWIG/Makefile.am b/src/SMESH_SWIG/Makefile.am index 232e1882b..dc8d2a32c 100644 --- a/src/SMESH_SWIG/Makefile.am +++ b/src/SMESH_SWIG/Makefile.am @@ -27,88 +27,11 @@ 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 -# /lib/python/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 \ smesh.py \ + smeshDC.py \ batchmode_smesh.py \ batchmode_mefisto.py \ ex00_all.py \ @@ -132,6 +55,7 @@ dist_salomescript_DATA= \ ex18_dome2.py \ ex19_sphereINcube.py \ ex21_lamp.py \ + ex24_cylinder.py \ SMESH_test.py\ SMESH_test0.py\ SMESH_test1.py \ @@ -165,6 +89,7 @@ dist_salomescript_DATA= \ 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 \ @@ -172,8 +97,3 @@ dist_salomescript_DATA= \ EXPORT_SHAREDPYSCRIPTS = \ SMESH_shared_modules.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/ex24_cylinder.py b/src/SMESH_SWIG/ex24_cylinder.py new file mode 100644 index 000000000..25a1e96d6 --- /dev/null +++ b/src/SMESH_SWIG/ex24_cylinder.py @@ -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/smesh.py b/src/SMESH_SWIG/smesh.py index 5b0607531..c8cadff0f 100644 --- a/src/SMESH_SWIG/smesh.py +++ b/src/SMESH_SWIG/smesh.py @@ -21,2562 +21,23 @@ # Author : Francis KLOSS, OCC # Module : SMESH -""" - \namespace smesh +"""@package smesh \brief Module smesh """ import salome -import geompy - -import SMESH -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 -Hexa = 7 -Hexotic = 8 -BLSURF = 9 - -# 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 - - -NO_NAME = "NoName" +from salome import * +import geompy +import smeshDC +from smeshDC import * smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") -smesh.SetCurrentStudy(salome.myStudy) - -# Global functions - -## 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) - -## Returns long value from enumeration -# Uses for SMESH.FunctorType enumeration -def EnumToLong(theItem): - return theItem._v - -## Get PointStruct from vertex -# @param theVertex is GEOM object(vertex) -# @return SMESH.PointStruct -def GetPointStruct(theVertex): - [x, y, z] = geompy.PointCoordinates(theVertex) - return PointStruct(x,y,z) - -## Get DirStruct from vector -# @param theVector is GEOM object(vector) -# @return SMESH.DirStruct -def GetDirStruct(theVector): - vertices = geompy.SubShapeAll( theVector, geompy.ShapeType["VERTEX"] ) - if(len(vertices) != 2): - print "Error: vector object is incorrect." - return None - p1 = geompy.PointCoordinates(vertices[0]) - p2 = geompy.PointCoordinates(vertices[1]) - pnt = PointStruct(p2[0]-p1[0], p2[1]-p1[1], p2[2]-p1[2]) - dir = DirStruct(pnt) - return dir - -## Get AxisStruct from object -# @param theObj is GEOM object(line or plane) -# @return SMESH.AxisStruct -def GetAxisStruct(theObj): - edges = geompy.SubShapeAll( theObj, geompy.ShapeType["EDGE"] ) - if len(edges) > 1: - vertex1, vertex2 = geompy.SubShapeAll( edges[0], geompy.ShapeType["VERTEX"] ) - vertex3, vertex4 = geompy.SubShapeAll( edges[1], geompy.ShapeType["VERTEX"] ) - vertex1 = geompy.PointCoordinates(vertex1) - vertex2 = geompy.PointCoordinates(vertex2) - vertex3 = geompy.PointCoordinates(vertex3) - vertex4 = geompy.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 = geompy.SubShapeAll( edges[0], geompy.ShapeType["VERTEX"] ) - p1 = geompy.PointCoordinates( vertex1 ) - p2 = geompy.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( theMode ): - smesh.SetEmbeddedMode(theMode) - -## Get the current mode -def IsEmbeddedMode(): - return smesh.IsEmbeddedMode() - -## Set the current study -def SetCurrentStudy( theStudy ): - smesh.SetCurrentStudy(theStudy) - -## Get the current study -def GetCurrentStudy(): - return smesh.GetCurrentStudy() - -## Create Mesh object importing data from given UNV file -# @return an instance of Mesh class -def CreateMeshesFromUNV( theFileName ): - aSmeshMesh = smesh.CreateMeshesFromUNV(theFileName) - aMesh = Mesh(aSmeshMesh) - return aMesh - -## Create Mesh object(s) importing data from given MED file -# @return a list of Mesh class instances -def CreateMeshesFromMED( theFileName ): - aSmeshMeshes, aStatus = smesh.CreateMeshesFromMED(theFileName) - aMeshes = [] - for iMesh in range(len(aSmeshMeshes)) : - aMesh = Mesh(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( theFileName ): - aSmeshMesh = smesh.CreateMeshesFromSTL(theFileName) - aMesh = Mesh(aSmeshMesh) - return aMesh - -## From SMESH_Gen interface -def GetSubShapesId( theMainObject, theListOfSubObjects ): - return smesh.GetSubShapesId(theMainObject, theListOfSubObjects) - -## From SMESH_Gen interface. Creates pattern -def GetPattern(): - return smesh.GetPattern() - - - -# Filtering. Auxiliary functions: -# ------------------------------ - -## Creates an empty criterion -# @return SMESH.Filter.Criterion -def GetEmptyCriterion(): - Type = EnumToLong(FT_Undefined) - Compare = EnumToLong(FT_Undefined) - Threshold = 0 - ThresholdStr = "" - ThresholdID = "" - UnaryOp = EnumToLong(FT_Undefined) - BinaryOp = 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(elementType, - CritType, - Compare = FT_EqualTo, - Treshold="", - UnaryOp=FT_Undefined, - BinaryOp=FT_Undefined): - aCriterion = GetEmptyCriterion() - aCriterion.TypeOfElement = elementType - aCriterion.Type = EnumToLong(CritType) - - aTreshold = Treshold - - if Compare in [FT_LessThan, FT_MoreThan, FT_EqualTo]: - aCriterion.Compare = EnumToLong(Compare) - elif Compare == "=" or Compare == "==": - aCriterion.Compare = EnumToLong(FT_EqualTo) - elif Compare == "<": - aCriterion.Compare = EnumToLong(FT_LessThan) - elif Compare == ">": - aCriterion.Compare = EnumToLong(FT_MoreThan) - else: - aCriterion.Compare = EnumToLong(FT_EqualTo) - aTreshold = Compare - - if CritType in [FT_BelongToGeom, FT_BelongToPlane, FT_BelongToGenSurface, - FT_BelongToCylinder, FT_LyingOnGeom]: - # Check treshold - if isinstance(aTreshold, geompy.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 don't need treshold - if aTreshold == FT_LogicalNOT: - aCriterion.UnaryOp = 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 = EnumToLong(FT_LogicalNOT) - - if Treshold in [FT_LogicalAND, FT_LogicalOR]: - aCriterion.BinaryOp = EnumToLong(Treshold) - - if UnaryOp in [FT_LogicalAND, FT_LogicalOR]: - aCriterion.BinaryOp = EnumToLong(UnaryOp) - - if BinaryOp in [FT_LogicalAND, FT_LogicalOR]: - aCriterion.BinaryOp = 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(elementType, - CritType=FT_Undefined, - Compare=FT_EqualTo, - Treshold="", - UnaryOp=FT_Undefined): - aCriterion = GetCriterion(elementType, CritType, Compare, Treshold, UnaryOp, FT_Undefined) - aFilterMgr = smesh.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(theCriterion): - aFilterMgr = smesh.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." - - -## 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 - - - -## 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; \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): - list = [] - if self.algo: - list = self.algo.GetCompatibleHypothesis() - return list - - ## 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" - 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) - 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 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. - # \n 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) - elif algo == COMPOSITE: - return Mesh_CompositeSegment(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. - # \n Otherwise, this algorithm define a submesh based on \a geom subshape. - # @param algo values are: smesh.MEFISTO or smesh.NETGEN - # @param geom If defined, subshape to be meshed - def Triangle(self, algo=MEFISTO, geom=0): - ## if Triangle(geom) is called by mistake - if ( isinstance( algo, geompy.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 - 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 - def Tetrahedron(self, algo=NETGEN, 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. - # \n 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) - def Hexahedron(self, algo=Hexa, geom=0): - ## if Hexahedron(geom, algo) or Hexahedron(geom) is called by mistake - if ( isinstance(algo, geompy.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! - 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 - 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 - 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 - 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 - def Prism(self, geom=0): - shape = geom - if shape==0: - shape = self.geom - nbSolids = len( geompy.SubShapeAll( shape, geompy.ShapeType["SOLID"] )) - nbShells = len( geompy.SubShapeAll( shape, geompy.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 - def Compute(self, geom=0): - if geom == 0 or not isinstance(geom, geompy.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 = smesh.Compute(self.mesh, geom) - except SALOME.SALOME_Exception, ex: - print "Mesh computation failed, exception cought:" - print " ", ex.details.text - except: - import traceback - print "Mesh computation failed, exception cought:" - traceback.print_exc() - if not ok: - errors = smesh.GetAlgoState( self.mesh, geom ) - allReasons = "" - for err in errors: - if err.isGlobalAlgo: - glob = " global " - else: - glob = " local " - pass - dim = str(err.algoDim) - if err.name == MISSING_ALGO: - reason = glob + dim + "D algorithm is missing" - elif err.name == MISSING_HYPO: - name = '"' + err.algoName + '"' - reason = glob + dim + "D algorithm " + name + " misses " + dim + "D hypothesis" - elif err.name == NOT_CONFORM_MESH: - reason = "Global \"Not Conform mesh allowed\" hypothesis is missing" - elif err.name == BAD_PARAM_VALUE: - name = '"' + err.algoName + '"' - reason = "Hypothesis of" + glob + dim + "D algorithm " + name +\ - " has a bad parameter value" - else: - reason = "For unknown reason."+\ - " Revise Mesh.Compute() implementation in smesh.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 - 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() - - ## Assign hypothesis - # @param hyp is a hypothesis to assign - # @param geom is subhape of mesh geometry - 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.SMESH_Algo ) is not None ) - TreatHypoStatus( status, GetName( hyp ), GetName( geom ), isAlgo ) - return status - - ## Get the list of hypothesis added on a geom - # @param geom is subhape of mesh geometry - 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="", type=None): - if name == "": - name = grp.GetName() - - if type == None: - tgeo = str(grp.GetShapeType()) - if tgeo == "VERTEX": - type = NODE - elif tgeo == "EDGE": - type = EDGE - elif tgeo == "FACE": - type = FACE - elif tgeo == "SOLID": - type = VOLUME - elif tgeo == "SHELL": - type = 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 = NODE - elif tgeo == geompy.ShapeType["EDGE"]: - type = EDGE - elif tgeo == geompy.ShapeType["FACE"]: - type = FACE - elif tgeo == geompy.ShapeType["SOLID"]: - type = VOLUME - - if type == 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(type, 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 = 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 = smesh.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 = smesh.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 = smesh.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 - def GetGroups(self): - return self.mesh.GetGroups() - - ## Get the list of names of groups existing in the mesh - 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 - 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. - 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 - 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() - - ## Get the internal Id - def GetId(self): - return self.mesh.GetId() - - ## Get the study Id - def GetStudyId(self): - return self.mesh.GetStudyId() - - ## Check group names for duplications. - # Consider maximum group name length stored in MED file. - def HasDuplicatedGroupNamesMED(self): - return self.mesh.GetStudyId() - - ## Obtain instance of SMESH_MeshEditor - def GetMeshEditor(self): - return self.mesh.GetMeshEditor() - - ## Get MED Mesh - def GetMEDMesh(self): - return self.mesh.GetMEDMesh() - - - # Get informations about mesh contents: - # ------------------------------------ - - ## Returns number of nodes in mesh - def NbNodes(self): - return self.mesh.NbNodes() - - ## Returns number of elements in mesh - def NbElements(self): - return self.mesh.NbElements() - - ## Returns number of edges in mesh - 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 - def NbEdgesOfOrder(self, elementOrder): - return self.mesh.NbEdgesOfOrder(elementOrder) - - ## Returns number of faces in mesh - 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 - def NbFacesOfOrder(self, elementOrder): - return self.mesh.NbFacesOfOrder(elementOrder) - - ## Returns number of triangles in mesh - 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 - def NbTrianglesOfOrder(self, elementOrder): - return self.mesh.NbTrianglesOfOrder(elementOrder) - - ## Returns number of quadrangles in mesh - 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 - def NbQuadranglesOfOrder(self, elementOrder): - return self.mesh.NbQuadranglesOfOrder(elementOrder) - - ## Returns number of polygons in mesh - def NbPolygons(self): - return self.mesh.NbPolygons() - - ## Returns number of volumes in mesh - 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 - def NbVolumesOfOrder(self, elementOrder): - return self.mesh.NbVolumesOfOrder(elementOrder) - - ## Returns number of tetrahedrons in mesh - 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 - def NbTetrasOfOrder(self, elementOrder): - return self.mesh.NbTetrasOfOrder(elementOrder) - - ## Returns number of hexahedrons in mesh - 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 - def NbHexasOfOrder(self, elementOrder): - return self.mesh.NbHexasOfOrder(elementOrder) - - ## Returns number of pyramids in mesh - 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 - def NbPyramidsOfOrder(self, elementOrder): - return self.mesh.NbPyramidsOfOrder(elementOrder) - - ## Returns number of prisms in mesh - 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 - def NbPrismsOfOrder(self, elementOrder): - return self.mesh.NbPrismsOfOrder(elementOrder) - - ## Returns number of polyhedrons in mesh - def NbPolyhedrons(self): - return self.mesh.NbPolyhedrons() - - ## Returns number of submeshes in mesh - def NbSubMesh(self): - return self.mesh.NbSubMesh() - - ## Returns list of mesh elements ids - def GetElementsId(self): - return self.mesh.GetElementsId() - - ## Returns list of ids of mesh elements with given type - # @param elementType is required type of elements - def GetElementsByType(self, elementType): - return self.mesh.GetElementsByType(elementType) - - ## Returns list of mesh nodes ids - def GetNodesId(self): - return self.mesh.GetNodesId() - - # Get informations about mesh elements: - # ------------------------------------ - - ## Returns type of mesh element - def GetElementType(self, id, iselem): - return self.mesh.GetElementType(id, iselem) - - ## Returns list of submesh elements ids - # @param shapeID is geom object(subshape) IOR - def GetSubMeshElementsId(self, shapeID): - return self.mesh.GetSubMeshElementsId(shapeID) - - ## Returns list of submesh nodes ids - # @param shapeID is geom object(subshape) IOR - def GetSubMeshNodesId(self, shapeID, all): - return self.mesh.GetSubMeshNodesId(shapeID, all) - - ## Returns list of ids of submesh elements with given type - # @param shapeID is geom object(subshape) IOR - def GetSubMeshElementType(self, shapeID): - return self.mesh.GetSubMeshElementType(shapeID) - - ## Get mesh description - def Dump(self): - return self.mesh.Dump() - - - # Get information about nodes and elements of mesh by its ids: - # ----------------------------------------------------------- - - ## Get XYZ coordinates of node as list of double - # \n If there is not node for given ID - returns empty list - 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 - def GetNodeInverseElements(self, id): - return self.mesh.GetNodeInverseElements(id) - - ## If given element is node returns IDs of shape from position - # \n If there is not node for given ID - returns -1 - 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 - def GetShapeIDForElem(id): - return self.mesh.GetShapeIDForElem(id) - - ## Returns number of nodes for given element - # \n If there is not element for given ID - returns -1 - 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 - def GetElemNode(self, id, index): - return self.mesh.GetElemNode(id, index) - - ## 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 - # as list of double - # \n If there is not element for given ID - returns empty list - 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 - 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 - def RemoveNodes(self, IDsOfNodes): - return self.editor.RemoveNodes(IDsOfNodes) - - ## Add node to mesh by coordinates - def AddNode(self, x, y, z): - return self.editor.AddNode( x, y, z) - - - ## Create edge 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. - def AddEdge(self, IDsOfNodes): - return self.editor.AddEdge(IDsOfNodes) - - ## Create face 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. - def AddFace(self, IDsOfNodes): - return self.editor.AddFace(IDsOfNodes) - - ## Add polygonal face to mesh by list of nodes ids - 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. - 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. - 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. - def AddPolyhedralVolumeByFaces (self, IdsOfFaces): - return self.editor.AddPolyhedralVolumeByFaces(IdsOfFaces) - - ## 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 - 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 - 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 - def ReorientObject(self, theObject): - 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, 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): - return self.editor.TriToQuadObject(theObject, 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. - # @param @return TRUE in case of success, FALSE otherwise. - def QuadToTri (self, IDsOfElements, theCriterion): - if IDsOfElements == []: - IDsOfElements = self.GetElementsId() - return self.editor.QuadToTri(IDsOfElements, 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. - def QuadToTriObject (self, theObject, theCriterion): - return self.editor.QuadToTriObject(theObject, 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 - def SplitQuadObject (self, theObject, Diag13): - 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, GetFunctor(theCriterion)) - - ## Split quafrangle 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 -th node of each volume, the (0,0,1) - # key-point will be mapped into -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 = 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 -th node of each volume, the (0,0,1) - # key-point will be mapped into -th node of each volume. - # The edge (0,0,0)-(0,0,1) of used pattern connects two not split corners. - # @param @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 = 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) - 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) - def SmoothObject(self, theObject, IDsOfFixedNodes, - MaxNbOfIterations, MaxxAspectRatio, Method): - 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) - def SmoothParametric(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) - def SmoothParametricObject(self, theObject, IDsOfFixedNodes, - MaxNbOfIterations, MaxAspectRatio, Method): - 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. - 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 - def RotationSweep(self, IDsOfElements, Axix, AngleInRadians, NbOfSteps, Tolerance): - if IDsOfElements == []: - IDsOfElements = self.GetElementsId() - if ( isinstance( Axix, geompy.GEOM._objref_GEOM_Object)): - Axix = GetAxisStruct(Axix) - self.editor.RotationSweep(IDsOfElements, Axix, AngleInRadians, NbOfSteps, Tolerance) - - ## 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 - def RotationSweepObject(self, theObject, Axix, AngleInRadians, NbOfSteps, Tolerance): - if ( isinstance( Axix, geompy.GEOM._objref_GEOM_Object)): - Axix = GetAxisStruct(Axix) - self.editor.RotationSweepObject(theObject, Axix, AngleInRadians, NbOfSteps, Tolerance) - - ## 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 - def ExtrusionSweep(self, IDsOfElements, StepVector, NbOfSteps): - if IDsOfElements == []: - IDsOfElements = self.GetElementsId() - if ( isinstance( StepVector, geompy.GEOM._objref_GEOM_Object)): - StepVector = GetDirStruct(StepVector) - self.editor.ExtrusionSweep(IDsOfElements, StepVector, NbOfSteps) - - ## 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 - def AdvancedExtrusion(self, IDsOfElements, StepVector, NbOfSteps, ExtrFlags, SewTolerance): - if ( isinstance( StepVector, geompy.GEOM._objref_GEOM_Object)): - StepVector = GetDirStruct(StepVector) - self.editor.AdvancedExtrusion(IDsOfElements, StepVector, NbOfSteps, ExtrFlags, SewTolerance) - - ## 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 - def ExtrusionSweepObject(self, theObject, StepVector, NbOfSteps): - if ( isinstance( StepVector, geompy.GEOM._objref_GEOM_Object)): - StepVector = GetDirStruct(StepVector) - self.editor.ExtrusionSweepObject(theObject, StepVector, NbOfSteps) - - ## 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 - def ExtrusionSweepObject1D(self, theObject, StepVector, NbOfSteps): - if ( isinstance( StepVector, geompy.GEOM._objref_GEOM_Object)): - StepVector = GetDirStruct(StepVector) - self.editor.ExtrusionSweepObject1D(theObject, StepVector, NbOfSteps) - - ## 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 - def ExtrusionSweepObject2D(self, theObject, StepVector, NbOfSteps): - if ( isinstance( StepVector, geompy.GEOM._objref_GEOM_Object)): - StepVector = GetDirStruct(StepVector) - self.editor.ExtrusionSweepObject2D(theObject, StepVector, NbOfSteps) - - ## 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 LinearVariation makes compute rotation angles as linear variation of given Angles along path steps - def ExtrusionAlongPath(self, IDsOfElements, PathMesh, PathShape, NodeStart, - HasAngles, Angles, HasRefPoint, RefPoint, LinearVariation=False): - if IDsOfElements == []: - IDsOfElements = self.GetElementsId() - if ( isinstance( RefPoint, geompy.GEOM._objref_GEOM_Object)): - RefPoint = GetPointStruct(RefPoint) - pass - 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 LinearVariation makes compute rotation angles as linear variation of given Angles along path steps - def ExtrusionAlongPathObject(self, theObject, PathMesh, PathShape, NodeStart, - HasAngles, Angles, HasRefPoint, RefPoint, LinearVariation=False): - if ( isinstance( RefPoint, geompy.GEOM._objref_GEOM_Object)): - RefPoint = GetPointStruct(RefPoint) - return self.editor.ExtrusionAlongPathObject(theObject, PathMesh.GetMesh(), PathShape, NodeStart, - HasAngles, Angles, HasRefPoint, RefPoint, LinearVariation) - - ## 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) - def Mirror(self, IDsOfElements, Mirror, theMirrorType, Copy=0): - if IDsOfElements == []: - IDsOfElements = self.GetElementsId() - if ( isinstance( Mirror, geompy.GEOM._objref_GEOM_Object)): - Mirror = GetAxisStruct(Mirror) - self.editor.Mirror(IDsOfElements, Mirror, theMirrorType, Copy) - - ## 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) - def MirrorObject (self, theObject, Mirror, theMirrorType, Copy=0): - if ( isinstance( Mirror, geompy.GEOM._objref_GEOM_Object)): - Mirror = GetAxisStruct(Mirror) - self.editor.MirrorObject(theObject, Mirror, theMirrorType, Copy) - - ## 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 - def Translate(self, IDsOfElements, Vector, Copy): - if IDsOfElements == []: - IDsOfElements = self.GetElementsId() - if ( isinstance( Vector, geompy.GEOM._objref_GEOM_Object)): - Vector = GetDirStruct(Vector) - self.editor.Translate(IDsOfElements, Vector, Copy) - - ## 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 - def TranslateObject(self, theObject, Vector, Copy): - if ( isinstance( Vector, geompy.GEOM._objref_GEOM_Object)): - Vector = GetDirStruct(Vector) - self.editor.TranslateObject(theObject, Vector, Copy) - - ## 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 - def Rotate (self, IDsOfElements, Axis, AngleInRadians, Copy): - if IDsOfElements == []: - IDsOfElements = self.GetElementsId() - if ( isinstance( Axis, geompy.GEOM._objref_GEOM_Object)): - Axis = GetAxisStruct(Axis) - self.editor.Rotate(IDsOfElements, Axis, AngleInRadians, Copy) - - ## 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 - def RotateObject (self, theObject, Axis, AngleInRadians, Copy): - self.editor.RotateObject(theObject, Axis, AngleInRadians, Copy) - - ## Find group of nodes close to each other within Tolerance. - # @param Tolerance tolerance value - # @param 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 - # @param list of group of nodes - def FindCoincidentNodesOnPart (self, SubMeshOrGroup, Tolerance): - return self.editor.FindCoincidentNodesOnPart(SubMeshOrGroup, Tolerance) - - ## Merge nodes - # @param 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 - 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 - def SewConformFreeBorders (self, FirstNodeID1, SecondNodeID1, LastNodeID1, - FirstNodeID2, SecondNodeID2): - return self.editor.SewConformFreeBorders(FirstNodeID1, SecondNodeID1, LastNodeID1, - FirstNodeID2, SecondNodeID2) - - ## Sew border to side - 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. - def SewSideElements (self, IDsOfSide1Elements, IDsOfSide2Elements, - NodeID1OfSide1ToMerge, NodeID1OfSide2ToMerge, - NodeID2OfSide1ToMerge, NodeID2OfSide2ToMerge): - return self.editor.SewSideElements(IDsOfSide1Elements, IDsOfSide2Elements, - NodeID1OfSide1ToMerge, NodeID1OfSide2ToMerge, - NodeID2OfSide1ToMerge, NodeID2OfSide2ToMerge) +smesh.init_smesh(salome.myStudy,geompy.geom) - ## 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 it's IDs, \n - # if new nodes not created - returns empty list - def GetLastCreatedNodes(self): - return self.editor.GetLastCreatedNodes() +# Export the methods of smeshD +for k in dir(smesh): + if k[0] == '_':continue + globals()[k]=getattr(smesh,k) +del k - ## If during last operation of MeshEditor some elements were - # created this method returns list of it's IDs, \n - # if new elements not creared - returns empty list - def GetLastCreatedElems(self): - return self.editor.GetLastCreatedElems() diff --git a/src/SMESH_SWIG/smeshDC.py b/src/SMESH_SWIG/smeshDC.py new file mode 100644 index 000000000..371550437 --- /dev/null +++ b/src/SMESH_SWIG/smeshDC.py @@ -0,0 +1,3326 @@ +# 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 +""" + +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 + +class smeshDC(SMESH._objref_SMESH_Gen): + + def init_smesh(self,theStudy,geompyD): + self.geompyD=geompyD + self.SetGeomEngine(geompyD) + self.SetCurrentStudy(theStudy) + + def Mesh(self, obj=0, name=0): + return Mesh(self,self.geompyD,obj,name) + + ## Returns long value from enumeration + # Uses 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 + def GetSubShapesId( self, theMainObject, theListOfSubObjects ): + return SMESH._objref_SMESH_Gen.GetSubShapesId(self,theMainObject, theListOfSubObjects) + + ## From SMESH_Gen interface. Creates 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) + + +## 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. + 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. + 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 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 sets, this algorithm is REGULAR. + # 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.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, 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 + # @param geom If defined, subshape to be meshed + 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 + 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 + 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 geom If defined, subshape to be meshed + ## def Hexahedron(self, geom=0): + ## return Mesh_Hexahedron(self, geom) + 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! + 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 + 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 + 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 + 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 + 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 + 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 + 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() + + ## Assign hypothesis + # @param hyp is a hypothesis to assign + # @param geom is subhape of mesh geometry + 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 + 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 + 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 + def GetGroups(self): + return self.mesh.GetGroups() + + ## Get number of groups existing in the mesh + def NbGroups(self): + return self.mesh.NbGroups() + + ## Get the list of names of groups existing in the mesh + 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 + 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. + 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 + 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() + + def SetAutoColor(self, color): + self.mesh.SetAutoColor(color) + + def GetAutoColor(self): + return self.mesh.GetAutoColor() + + ## Get the internal Id + def GetId(self): + return self.mesh.GetId() + + ## Get the study Id + def GetStudyId(self): + return self.mesh.GetStudyId() + + ## Check group names for duplications. + # Consider maximum group name length stored in MED file. + def HasDuplicatedGroupNamesMED(self): + return self.mesh.HasDuplicatedGroupNamesMED() + + ## Obtain instance of SMESH_MeshEditor + def GetMeshEditor(self): + return self.mesh.GetMeshEditor() + + ## Get MED Mesh + def GetMEDMesh(self): + return self.mesh.GetMEDMesh() + + + # Get informations about mesh contents: + # ------------------------------------ + + ## Returns number of nodes in mesh + def NbNodes(self): + return self.mesh.NbNodes() + + ## Returns number of elements in mesh + def NbElements(self): + return self.mesh.NbElements() + + ## Returns number of edges in mesh + 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 + def NbEdgesOfOrder(self, elementOrder): + return self.mesh.NbEdgesOfOrder(elementOrder) + + ## Returns number of faces in mesh + 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 + def NbFacesOfOrder(self, elementOrder): + return self.mesh.NbFacesOfOrder(elementOrder) + + ## Returns number of triangles in mesh + 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 + def NbTrianglesOfOrder(self, elementOrder): + return self.mesh.NbTrianglesOfOrder(elementOrder) + + ## Returns number of quadrangles in mesh + 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 + def NbQuadranglesOfOrder(self, elementOrder): + return self.mesh.NbQuadranglesOfOrder(elementOrder) + + ## Returns number of polygons in mesh + def NbPolygons(self): + return self.mesh.NbPolygons() + + ## Returns number of volumes in mesh + 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 + def NbVolumesOfOrder(self, elementOrder): + return self.mesh.NbVolumesOfOrder(elementOrder) + + ## Returns number of tetrahedrons in mesh + 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 + def NbTetrasOfOrder(self, elementOrder): + return self.mesh.NbTetrasOfOrder(elementOrder) + + ## Returns number of hexahedrons in mesh + 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 + def NbHexasOfOrder(self, elementOrder): + return self.mesh.NbHexasOfOrder(elementOrder) + + ## Returns number of pyramids in mesh + 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 + def NbPyramidsOfOrder(self, elementOrder): + return self.mesh.NbPyramidsOfOrder(elementOrder) + + ## Returns number of prisms in mesh + 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 + def NbPrismsOfOrder(self, elementOrder): + return self.mesh.NbPrismsOfOrder(elementOrder) + + ## Returns number of polyhedrons in mesh + def NbPolyhedrons(self): + return self.mesh.NbPolyhedrons() + + ## Returns number of submeshes in mesh + def NbSubMesh(self): + return self.mesh.NbSubMesh() + + ## Returns list of mesh elements ids + def GetElementsId(self): + return self.mesh.GetElementsId() + + ## Returns list of ids of mesh elements with given type + # @param elementType is required type of elements + def GetElementsByType(self, elementType): + return self.mesh.GetElementsByType(elementType) + + ## Returns list of mesh nodes ids + def GetNodesId(self): + return self.mesh.GetNodesId() + + # Get informations about mesh elements: + # ------------------------------------ + + ## Returns type of mesh element + 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() + 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() + 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() + 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 + def Dump(self): + return self.mesh.Dump() + + + # Get information about nodes and elements of mesh by its ids: + # ----------------------------------------------------------- + + ## Get XYZ coordinates of node as list of double + # \n If there is not node for given ID - returns empty list + 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 + 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 + 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 + 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 + 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 + def GetElemNode(self, id, index): + return self.mesh.GetElemNode(id, index) + + ## Returns IDs of nodes of given element + 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 + # as list of double + # \n If there is not element for given ID - returns empty list + 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 + 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 + def RemoveNodes(self, IDsOfNodes): + return self.editor.RemoveNodes(IDsOfNodes) + + ## Add node to mesh by coordinates + def AddNode(self, x, y, z): + return self.editor.AddNode( x, y, z) + + + ## Create edge 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. + def AddEdge(self, IDsOfNodes): + return self.editor.AddEdge(IDsOfNodes) + + ## Create face 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. + def AddFace(self, IDsOfNodes): + return self.editor.AddFace(IDsOfNodes) + + ## Add polygonal face to mesh by list of nodes ids + 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. + 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. + 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. + 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 + 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 + 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 + 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. + 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 + 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 quafrangle 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 -th node of each volume, the (0,0,1) + # key-point will be mapped into -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 -th node of each volume, the (0,0,1) + # key-point will be mapped into -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) + 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) + 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) + 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) + 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. + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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) + 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 + 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) + 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 + 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) + 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 + 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) + 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 + 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) + 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 + 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) + 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 + 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 + # @param 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 + # @param list of group of nodes + def FindCoincidentNodesOnPart (self, SubMeshOrGroup, Tolerance): + return self.editor.FindCoincidentNodesOnPart(SubMeshOrGroup, Tolerance) + + ## Merge nodes + # @param 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 + 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 + def SewConformFreeBorders (self, FirstNodeID1, SecondNodeID1, LastNodeID1, + FirstNodeID2, SecondNodeID2): + return self.editor.SewConformFreeBorders(FirstNodeID1, SecondNodeID1, LastNodeID1, + FirstNodeID2, SecondNodeID2) + + ## Sew border to side + 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. + 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 + 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 + def GetLastCreatedElems(self): + return self.editor.GetLastCreatedElems() diff --git a/src/SMESH_SWIG_WITHIHM/Makefile.am b/src/SMESH_SWIG_WITHIHM/Makefile.am new file mode 100644 index 000000000..7988a23ea --- /dev/null +++ b/src/SMESH_SWIG_WITHIHM/Makefile.am @@ -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 +# /lib/python/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/libSMESH_Swig.i b/src/SMESH_SWIG_WITHIHM/libSMESH_Swig.i similarity index 100% rename from src/SMESH_SWIG/libSMESH_Swig.i rename to src/SMESH_SWIG_WITHIHM/libSMESH_Swig.i diff --git a/src/StdMeshers/Makefile.am b/src/StdMeshers/Makefile.am index d05ea4dbb..74d632a6f 100644 --- a/src/StdMeshers/Makefile.am +++ b/src/StdMeshers/Makefile.am @@ -58,10 +58,11 @@ salomeinclude_HEADERS = \ StdMeshers_RadialPrism_3D.hxx \ StdMeshers_ProjectionUtils.hxx \ StdMeshers_LayerDistribution.hxx \ - StdMeshers_CompositeSegment_1D.hxx \ - StdMeshers_FaceSide.hxx \ StdMeshers_SegmentAroundVertex_0D.hxx \ StdMeshers_SegmentLengthAroundVertex.hxx \ + StdMeshers_FaceSide.hxx \ + StdMeshers_CompositeSegment_1D.hxx \ + StdMeshers_UseExisting_1D2D.hxx \ SMESH_StdMeshers.hxx # Libraries targets @@ -99,10 +100,11 @@ dist_libStdMeshers_la_SOURCES = \ StdMeshers_RadialPrism_3D.cxx \ StdMeshers_ProjectionUtils.cxx \ StdMeshers_LayerDistribution.cxx \ - StdMeshers_CompositeSegment_1D.cxx \ - StdMeshers_FaceSide.cxx \ StdMeshers_SegmentAroundVertex_0D.cxx \ - StdMeshers_SegmentLengthAroundVertex.cxx + StdMeshers_SegmentLengthAroundVertex.cxx \ + StdMeshers_FaceSide.cxx \ + StdMeshers_CompositeSegment_1D.cxx \ + StdMeshers_UseExisting_1D2D.cxx # additionnal information to compil and link file @@ -110,6 +112,7 @@ libStdMeshers_la_CPPFLAGS = \ $(CAS_CPPFLAGS) \ $(BOOST_CPPFLAGS) \ $(KERNEL_CXXFLAGS) \ + $(GUI_CXXFLAGS) \ -I$(srcdir)/../SMESHImpl \ -I$(srcdir)/../MEFISTO2 \ -I$(srcdir)/../SMESH \ diff --git a/src/StdMeshers/StdMeshers_CompositeSegment_1D.cxx b/src/StdMeshers/StdMeshers_CompositeSegment_1D.cxx index 1820f6fe3..381caade1 100644 --- a/src/StdMeshers/StdMeshers_CompositeSegment_1D.cxx +++ b/src/StdMeshers/StdMeshers_CompositeSegment_1D.cxx @@ -91,8 +91,7 @@ namespace { eNext = TopoDS::Edge( ancestor ); } if ( edgeCounter.Extent() < 3 && !eNext.IsNull() ) { - GeomAbs_Shape cont = SMESH_Algo::Continuity( edge, eNext ); - if (cont >= GeomAbs_G1) { + if ( SMESH_Algo::IsContinuous( edge, eNext )) { // care of orientation bool reverse; if ( forward ) @@ -120,7 +119,7 @@ namespace { return; for ( int iE = 0; iE < side.NbEdges(); ++iE ) { - // set listener and its data + // set listener and its data EventListenerData * listenerData = new EventListenerData(true); const TopoDS_Edge& edge = side.Edge( iE ); SMESH_subMesh * sm = side.GetMesh()->GetSubMesh( edge ); @@ -334,7 +333,7 @@ bool StdMeshers_CompositeSegment_1D::Compute(SMESH_Mesh & aMesh, auto_ptr< BRepAdaptor_CompCurve > C3d ( side->GetCurve3d() ); double f = C3d->FirstParameter(), l = C3d->LastParameter(); list< double > params; - if ( !computeInternalParameters ( *C3d, side->Length(), f, l, params, false )) + if ( !computeInternalParameters ( aMesh, *C3d, side->Length(), f, l, params, false )) return false; // Redistribute parameters near ends @@ -350,7 +349,7 @@ bool StdMeshers_CompositeSegment_1D::Compute(SMESH_Mesh & aMesh, const SMDS_MeshNode * nFirst = SMESH_Algo::VertexNode( VFirst, meshDS ); const SMDS_MeshNode * nLast = SMESH_Algo::VertexNode( VLast, meshDS ); - if (!nFirst) + if (!nFirst) return error(COMPERR_BAD_INPUT_MESH, TComm("No node on vertex ") <ShapeToIndex(VFirst)); if (!nLast) @@ -415,4 +414,3 @@ bool StdMeshers_CompositeSegment_1D::Compute(SMESH_Mesh & aMesh, return true; } - diff --git a/src/StdMeshers/StdMeshers_CompositeSegment_1D.hxx b/src/StdMeshers/StdMeshers_CompositeSegment_1D.hxx index 66b87ecdf..9d16fa76b 100644 --- a/src/StdMeshers/StdMeshers_CompositeSegment_1D.hxx +++ b/src/StdMeshers/StdMeshers_CompositeSegment_1D.hxx @@ -29,6 +29,7 @@ #define _SMESH_CompositeSegment_1D_HXX_ #include "StdMeshers_Regular_1D.hxx" +#include "SMESH_StdMeshers.hxx" class SMESH_subMeshEventListener; class SMESH_Mesh; @@ -36,7 +37,7 @@ class StdMeshers_FaceSide; class TopoDS_Edge; class TopoDS_Face; -class StdMeshers_CompositeSegment_1D: public StdMeshers_Regular_1D +class STDMESHERS_EXPORT StdMeshers_CompositeSegment_1D: public StdMeshers_Regular_1D { public: StdMeshers_CompositeSegment_1D(int hypId, int studyId, SMESH_Gen* gen); diff --git a/src/StdMeshers/StdMeshers_Distribution.cxx b/src/StdMeshers/StdMeshers_Distribution.cxx index 441536327..fce8298f4 100644 --- a/src/StdMeshers/StdMeshers_Distribution.cxx +++ b/src/StdMeshers/StdMeshers_Distribution.cxx @@ -39,8 +39,6 @@ #ifdef NO_CAS_CATCH #include -#else -#include "CASCatch.hxx" #endif Function::Function( const int conv ) @@ -56,18 +54,12 @@ bool Function::value( const double, double& f ) const { bool ok = true; if (myConv == 0) { -#ifdef NO_CAS_CATCH try { +#ifdef NO_CAS_CATCH OCC_CATCH_SIGNALS; -#else - CASCatch_TRY { #endif f = pow( 10., f ); -#ifdef NO_CAS_CATCH } catch(Standard_Failure) { -#else - } CASCatch_CATCH(Standard_Failure) { -#endif Handle(Standard_Failure) aFail = Standard_Failure::Caught(); f = 0.0; ok = false; @@ -194,19 +186,13 @@ FunctionExpr::FunctionExpr( const char* str, const int conv ) myValues( 1, 1 ) { bool ok = true; -#ifdef NO_CAS_CATCH try { +#ifdef NO_CAS_CATCH OCC_CATCH_SIGNALS; -#else - CASCatch_TRY { #endif myExpr = ExprIntrp_GenExp::Create(); myExpr->Process( ( Standard_CString )str ); -#ifdef NO_CAS_CATCH } catch(Standard_Failure) { -#else - } CASCatch_CATCH(Standard_Failure) { -#endif Handle(Standard_Failure) aFail = Standard_Failure::Caught(); ok = false; } @@ -236,18 +222,12 @@ bool FunctionExpr::value( const double t, double& f ) const ( ( TColStd_Array1OfReal& )myValues ).ChangeValue( 1 ) = t; bool ok = true; -#ifdef NO_CAS_CATCH try { +#ifdef NO_CAS_CATCH OCC_CATCH_SIGNALS; -#else - CASCatch_TRY { #endif f = myExpr->Expression()->Evaluate( myVars, myValues ); -#ifdef NO_CAS_CATCH } catch(Standard_Failure) { -#else - } CASCatch_CATCH(Standard_Failure) { -#endif Handle(Standard_Failure) aFail = Standard_Failure::Caught(); f = 0.0; ok = false; @@ -260,21 +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; -#ifdef NO_CAS_CATCH try { +#ifdef NO_CAS_CATCH OCC_CATCH_SIGNALS; -#else - CASCatch_TRY { #endif math_GaussSingleIntegration _int ( *static_cast( const_cast (this) ), a, b, 20 ); if( _int.IsDone() ) res = _int.Value(); -#ifdef NO_CAS_CATCH } catch(Standard_Failure) { -#else - } CASCatch_CATCH(Standard_Failure) { -#endif res = 0.0; MESSAGE( "Exception in integral calculating" ); } diff --git a/src/StdMeshers/StdMeshers_FaceSide.cxx b/src/StdMeshers/StdMeshers_FaceSide.cxx index 85057fb5c..5850cb74e 100644 --- a/src/StdMeshers/StdMeshers_FaceSide.cxx +++ b/src/StdMeshers/StdMeshers_FaceSide.cxx @@ -32,9 +32,11 @@ #include "SMDS_MeshNode.hxx" #include "SMESHDS_Mesh.hxx" #include "SMESHDS_SubMesh.hxx" -#include "SMESH_Algo.hxx" +//#include "SMESH_Algo.hxx" #include "SMESH_Mesh.hxx" #include "SMESH_MeshEditor.hxx" +#include "SMESH_ComputeError.hxx" +#include "SMESH_Block.hxx" #include #include @@ -464,3 +466,51 @@ gp_Pnt2d StdMeshers_FaceSide::Value2d(double U) const } 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 index 1463d2d1f..e34dfe512 100644 --- a/src/StdMeshers/StdMeshers_FaceSide.hxx +++ b/src/StdMeshers/StdMeshers_FaceSide.hxx @@ -35,6 +35,9 @@ #include #include +#include "SMESH_StdMeshers.hxx" +#include "SMESH_Algo.hxx" + #include #include #include @@ -45,6 +48,7 @@ class Adaptor2d_Curve2d; class Adaptor3d_Curve; class BRepAdaptor_CompCurve; class TopoDS_Face; +class SMESH_ComputeError; typedef struct uvPtStruct { @@ -61,6 +65,8 @@ typedef struct 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; //================================================================================ /*! @@ -69,7 +75,7 @@ typedef boost::shared_ptr< uvPtStruct > UVPtStructPtr; */ //================================================================================ -class StdMeshers_FaceSide +class STDMESHERS_EXPORT StdMeshers_FaceSide { public: /*! @@ -88,6 +94,15 @@ public: 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 */ @@ -115,15 +130,15 @@ public: * * Missing nodes are allowed only on internal vertices */ - const vector& GetUVPtStruct(bool isXConst, double constValue) const; + const vector& 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& SimulateUVPtStruct(int nbSeg, - bool isXConst, - double constValue) const; + bool isXConst = 0, + double constValue = 0) const; /*! * \brief Return edge and parameter on edge by normalized parameter */ diff --git a/src/StdMeshers/StdMeshers_Hexa_3D.cxx b/src/StdMeshers/StdMeshers_Hexa_3D.cxx index 80cd6caeb..33efea5e7 100644 --- a/src/StdMeshers/StdMeshers_Hexa_3D.cxx +++ b/src/StdMeshers/StdMeshers_Hexa_3D.cxx @@ -45,13 +45,11 @@ #include "SMDS_VolumeOfNodes.hxx" #include +#include #include -#include #include -#include - -#include -#include +#include +#include #include #include "utilities.h" @@ -118,12 +116,15 @@ bool StdMeshers_Hexa_3D::CheckHypothesis SMESH_Hypothesis::Hypothesis_Status& aStatus) { // 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 ) - return false; - + break; + if ( nbFaces != 6 ) + return false; +*/ aStatus = SMESH_Hypothesis::HYP_OK; return true; } @@ -174,9 +175,10 @@ 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) + 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(); @@ -190,7 +192,7 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh, meshFaces.push_back(aSubMesh); } if (meshFaces.size() != 6) - return error(COMPERR_BAD_SHAPE, TComm(meshFaces.size())<<" instead of 6 faces in block"); + 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) @@ -251,6 +253,9 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh, ASSERT(quadAlgo); try { aQuads[i] = quadAlgo->CheckAnd2Dcompute(aMesh, aFace, _quadraticMesh); + if(!aQuads[i]) { + return error( quadAlgo->GetComputeError()); + } } catch(SALOME_Exception & S_ex) { return ClearAndReturn( aQuads, error(COMPERR_SLM_EXCEPTION,TComm(S_ex.what()) << diff --git a/src/StdMeshers/StdMeshers_Hexa_3D.hxx b/src/StdMeshers/StdMeshers_Hexa_3D.hxx index 09aa81303..1f1c4042d 100644 --- a/src/StdMeshers/StdMeshers_Hexa_3D.hxx +++ b/src/StdMeshers/StdMeshers_Hexa_3D.hxx @@ -76,7 +76,7 @@ public: virtual bool Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape) - throw (SALOME_Exception); + /*throw (SALOME_Exception)*/; static TopoDS_Vertex OppositeVertex(const TopoDS_Vertex& aVertex, const TopTools_IndexedMapOfShape& aQuads0Vertices, diff --git a/src/StdMeshers/StdMeshers_LocalLength.cxx b/src/StdMeshers/StdMeshers_LocalLength.cxx index 6fd6bbcf7..e3fe6e898 100644 --- a/src/StdMeshers/StdMeshers_LocalLength.cxx +++ b/src/StdMeshers/StdMeshers_LocalLength.cxx @@ -43,6 +43,7 @@ #include #include #include +#include using namespace std; @@ -56,6 +57,7 @@ StdMeshers_LocalLength::StdMeshers_LocalLength(int hypId, int studyId, SMESH_Gen :SMESH_Hypothesis(hypId, studyId, gen) { _length = 1.; + _precision = Precision::Confusion(); _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) { - 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 { - 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) { - save << this->_length; + save << this->_length << " " << this->_precision; return save; } @@ -119,11 +148,23 @@ istream & StdMeshers_LocalLength::LoadFrom(istream & load) { 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->_precision = a; + else + { + load.clear(ios::badbit | load.rdstate()); + // old format, without precision + _precision = 0.; + } + return load; } @@ -190,5 +231,7 @@ bool StdMeshers_LocalLength::SetParametersByMesh(const SMESH_Mesh* theMesh, if ( nbEdges ) _length /= nbEdges; + _precision = Precision::Confusion(); + return nbEdges; } diff --git a/src/StdMeshers/StdMeshers_LocalLength.hxx b/src/StdMeshers/StdMeshers_LocalLength.hxx index 79a85df7f..93fc49a6f 100644 --- a/src/StdMeshers/StdMeshers_LocalLength.hxx +++ b/src/StdMeshers/StdMeshers_LocalLength.hxx @@ -35,15 +35,17 @@ #include "SMESH_Hypothesis.hxx" #include "Utils_SALOME_Exception.hxx" -class STDMESHERS_EXPORT 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); + void SetPrecision(double precision) throw(SALOME_Exception); double GetLength() const; + double GetPrecision() const; virtual std::ostream & SaveTo(std::ostream & save); virtual std::istream & LoadFrom(std::istream & load); @@ -60,6 +62,7 @@ class STDMESHERS_EXPORT StdMeshers_LocalLength:public SMESH_Hypothesis protected: double _length; + double _precision; }; #endif diff --git a/src/StdMeshers/StdMeshers_MEFISTO_2D.cxx b/src/StdMeshers/StdMeshers_MEFISTO_2D.cxx index cb4e61fc1..7b76b3545 100644 --- a/src/StdMeshers/StdMeshers_MEFISTO_2D.cxx +++ b/src/StdMeshers/StdMeshers_MEFISTO_2D.cxx @@ -50,16 +50,20 @@ #include "utilities.h" -#include -#include -#include -#include -#include -#include #include +#include +#include +#include +#include +#include #include #include #include +#include +#include +#include +#include +#include using namespace std; @@ -187,42 +191,29 @@ bool StdMeshers_MEFISTO_2D::Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aSh const bool ignoreMediumNodes = _quadraticMesh; // get all edges of a face - TopoDS_Vertex V1; - list< TopoDS_Edge > edges; - list< int > nbEdgesInWires; - int nbWires = SMESH_Block::GetOrderedEdges (F, V1, edges, nbEdgesInWires); - - if (_hypLengthFromEdges) _edgeLength = 0; - - // split list of all edges into separate wires - TWireVector 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 ) + 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: ")<NbSegments()); + + // compute average edge length + if (_hypLengthFromEdges) { - 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 ( !VertexNode( TopExp::FirstVertex( wireEdges.front(), true), - aMesh.GetMeshDS())) + _edgeLength = 0; + int nbSegments = 0; + for ( int iW = 0; iW < nbWires; ++iW ) { - wireEdges.splice(wireEdges.end(), wireEdges, - wireEdges.begin(), ++wireEdges.begin()); - if ( from->IsSame( wireEdges.front() )) - return error(COMPERR_BAD_INPUT_MESH,"No nodes on vertices"); + StdMeshers_FaceSidePtr wire = wires[ iW ]; + _edgeLength += wire->Length(); + nbSegments += wire->NbSegments(); } - StdMeshers_FaceSide* wire = new StdMeshers_FaceSide( F, wireEdges, &aMesh, - true, ignoreMediumNodes); - wires[ iW ] = StdMeshers_FaceSidePtr( wire ); - if (_hypLengthFromEdges && wire->NbSegments() ) - _edgeLength += wire->Length() / wire->NbSegments(); - from = to; + if ( nbSegments ) + _edgeLength /= nbSegments; } - if ( wires[0]->NbSegments() < 3 ) // ex: a circle with 2 segments - return error(COMPERR_BAD_INPUT_MESH, - SMESH_Comment("Too few segments")<NbSegments()); if (_hypLengthFromEdges && _edgeLength < DBL_MIN ) _edgeLength = 100; @@ -502,22 +493,19 @@ bool StdMeshers_MEFISTO_2D::LoadPoints(TWireVector & wires, VWMap.Clear(); // wires have no common vertices } - const bool isXConst = false; // meaningles here - const double constValue = 0; // meaningles here - int m = 0; list< int > mOnVertex; for ( int iW = 0; iW < wires.size(); ++iW ) { - const vector& uvPtVec = wires[ iW ]->GetUVPtStruct(isXConst,constValue); + const vector& 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()<<" != "<NbPoints()); } if ( m + uvPtVec.size()-1 > mefistoToDS.size() ) { MESSAGE("Wrong mefistoToDS.size: "<::const_iterator uvPt = uvPtVec.begin(); diff --git a/src/StdMeshers/StdMeshers_NumberOfSegments.cxx b/src/StdMeshers/StdMeshers_NumberOfSegments.cxx index f4819f92c..51300c137 100644 --- a/src/StdMeshers/StdMeshers_NumberOfSegments.cxx +++ b/src/StdMeshers/StdMeshers_NumberOfSegments.cxx @@ -49,8 +49,6 @@ #ifdef NO_CAS_CATCH #include -#else -#include "CASCatch.hxx" #endif using namespace std; @@ -63,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), @@ -90,17 +89,20 @@ StdMeshers_NumberOfSegments::~StdMeshers_NumberOfSegments() * */ //============================================================================= -const std::vector& StdMeshers_NumberOfSegments::BuildDistributionExpr( const char* expr, int nbSeg, int conv ) -throw ( SALOME_Exception ) +const vector& +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; } -const std::vector& StdMeshers_NumberOfSegments::BuildDistributionTab( const std::vector& tab, - int nbSeg, int conv ) -throw ( SALOME_Exception ) +const vector& +StdMeshers_NumberOfSegments::BuildDistributionTab( const vector& tab, + int nbSeg, + int conv ) + throw ( SALOME_Exception ) { if( !buildDistribution( tab, conv, 0.0, 1.0, nbSeg, _distr, 1E-4 ) ) _distr.resize( 0 ); @@ -116,14 +118,13 @@ 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(); } //============================================================================= @@ -134,7 +135,7 @@ throw(SALOME_Exception) int StdMeshers_NumberOfSegments::GetNumberOfSegments() const { - return _numberOfSegments; + return _numberOfSegments; } //================================================================================ @@ -177,7 +178,8 @@ void StdMeshers_NumberOfSegments::SetScaleFactor(double scaleFactor) 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) @@ -210,11 +212,12 @@ double StdMeshers_NumberOfSegments::GetScaleFactor() const */ //================================================================================ -void StdMeshers_NumberOfSegments::SetTableFunction(const std::vector& table) +void StdMeshers_NumberOfSegments::SetTableFunction(const vector& table) 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")); @@ -228,18 +231,12 @@ void StdMeshers_NumberOfSegments::SetTableFunction(const std::vector& ta double val = table[i*2+1]; if( _convMode==0 ) { -#ifdef NO_CAS_CATCH try { +#ifdef NO_CAS_CATCH OCC_CATCH_SIGNALS; -#else - CASCatch_TRY { #endif val = pow( 10.0, val ); -#ifdef NO_CAS_CATCH } catch(Standard_Failure) { -#else - } CASCatch_CATCH(Standard_Failure) { -#endif Handle(Standard_Failure) aFail = Standard_Failure::Caught(); throw SALOME_Exception( LOCALIZED( "invalid value")); return; @@ -282,7 +279,7 @@ void StdMeshers_NumberOfSegments::SetTableFunction(const std::vector& ta */ //================================================================================ -const std::vector& StdMeshers_NumberOfSegments::GetTableFunction() const +const vector& StdMeshers_NumberOfSegments::GetTableFunction() const throw(SALOME_Exception) { if (_distrType != DT_TabFunc) @@ -328,19 +325,13 @@ bool process( const TCollection_AsciiString& str, int convMode, { bool parsed_ok = true; Handle( ExprIntrp_GenExp ) myExpr; -#ifdef NO_CAS_CATCH try { +#ifdef NO_CAS_CATCH OCC_CATCH_SIGNALS; -#else - CASCatch_TRY { #endif myExpr = ExprIntrp_GenExp::Create(); myExpr->Process( str.ToCString() ); -#ifdef NO_CAS_CATCH } catch(Standard_Failure) { -#else - } CASCatch_CATCH(Standard_Failure) { -#endif Handle(Standard_Failure) aFail = Standard_Failure::Caught(); parsed_ok = false; } @@ -396,7 +387,8 @@ void StdMeshers_NumberOfSegments::SetExpressionFunction(const char* expr) 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); @@ -428,7 +420,7 @@ void StdMeshers_NumberOfSegments::SetExpressionFunction(const char* expr) return; } - std::string func = expr; + string func = expr; if( _func != func ) { _func = func; @@ -459,8 +451,8 @@ const char* StdMeshers_NumberOfSegments::GetExpressionFunction() const 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 ) { @@ -478,8 +470,8 @@ void StdMeshers_NumberOfSegments::SetConversionMode( int conv ) 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; } @@ -675,10 +667,10 @@ bool StdMeshers_NumberOfSegments::SetParametersByMesh(const SMESH_Mesh* theMes 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 - SMESHDS_Mesh* aMeshDS = const_cast< SMESH_Mesh* >( theMesh )->GetMeshDS(); SMESHDS_SubMesh * eSubMesh = aMeshDS->MeshElements( edgeMap( i )); if ( eSubMesh && eSubMesh->NbElements()) _numberOfSegments += eSubMesh->NbElements(); diff --git a/src/StdMeshers/StdMeshers_Penta_3D.cxx b/src/StdMeshers/StdMeshers_Penta_3D.cxx index fd1fe47cf..4030cdfce 100644 --- a/src/StdMeshers/StdMeshers_Penta_3D.cxx +++ b/src/StdMeshers/StdMeshers_Penta_3D.cxx @@ -40,25 +40,18 @@ #include "SMESH_subMeshEventListener.hxx" #include "SMESH_Comment.hxx" -#include -#include #include -#include #include +#include #include #include -#include #include #include -#include #include #include #include #include #include -#include -#include -#include #include #include diff --git a/src/StdMeshers/StdMeshers_Prism_3D.cxx b/src/StdMeshers/StdMeshers_Prism_3D.cxx index 8d87d043f..4d818a468 100644 --- a/src/StdMeshers/StdMeshers_Prism_3D.cxx +++ b/src/StdMeshers/StdMeshers_Prism_3D.cxx @@ -38,17 +38,17 @@ #include "utilities.h" -#include -#include -#include #include #include #include +#include +#include #include +#include using namespace std; -#define RETURN_BAD_RESULT(msg) { MESSAGE(msg); return false; } +#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); \ @@ -101,7 +101,7 @@ namespace { const SMDS_MeshNode* & node1, const SMDS_MeshNode* & node2) { - if ( param == 1.0 || column->size() == 1) { + if ( param >= 1.0 || column->size() == 1) { node1 = node2 = column->back(); return 0; } @@ -185,7 +185,7 @@ bool StdMeshers_Prism_3D::CheckHypothesis(SMESH_Mesh& a SMESH_Hypothesis::Hypothesis_Status& aStatus) { // Check shape geometry - +/* PAL16229 aStatus = SMESH_Hypothesis::HYP_BAD_GEOMETRY; // find not quadrangle faces @@ -216,7 +216,7 @@ bool StdMeshers_Prism_3D::CheckHypothesis(SMESH_Mesh& a 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; @@ -275,17 +275,20 @@ bool StdMeshers_Prism_3D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& theSh TNodeColumn& column = bot_column->second; // bottom node parameters and coords - gp_XYZ botParams = tBotNode.GetParams(); myShapeXYZ[ ID_BOT_FACE ] = tBotNode.GetCoords(); + gp_XYZ botParams = tBotNode.GetParams(); // compute top node parameters - gp_XYZ topParams; myShapeXYZ[ ID_TOP_FACE ] = gpXYZ( column.back() ); - gp_Pnt topCoords = myShapeXYZ[ ID_TOP_FACE ]; - if ( !myBlock.ComputeParameters( topCoords, topParams, ID_TOP_FACE )) - return error(dfltErr(),TCom("Can't compute normalized parameters ") - << "for node " << column.back()->GetID() - << " on the face #"<< column.back()->GetPosition()->GetShapeId() ); + 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(); @@ -311,7 +314,11 @@ bool StdMeshers_Prism_3D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& theSh // compute coords for a new node gp_XYZ coords; if ( !SMESH_Block::ShellPoint( params, myShapeXYZ, coords )) - return error(dfltErr(),"Can't compute coordinates by normalized parameters"); + 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() ); @@ -344,13 +351,13 @@ bool StdMeshers_Prism_3D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& theSh if ( n->GetPosition()->GetTypeOfPosition() == SMDS_TOP_FACE ) { bot_column = myBotToColumnMap.find( n ); if ( bot_column == myBotToColumnMap.end() ) - return error(dfltErr(),TCom("No nodes found above node ") << n->GetID() ); + 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(dfltErr(),TCom("No side nodes found above node ") << n->GetID() ); + return error(TCom("No side nodes found above node ") << n->GetID() ); } } // create prisms @@ -376,12 +383,44 @@ void StdMeshers_Prism_3D::AddPrisms( vector & columns, 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 ( int z = 1; z < columns[0]->size(); ++z) + for ( z = 1; z < nbZ; ++z ) { SMDS_MeshElement* vol = 0; - SMDS_VolumeTool vTool; switch ( nbNodes ) { case 3: { @@ -391,11 +430,7 @@ void StdMeshers_Prism_3D::AddPrisms( vector & columns, const SMDS_MeshNode* topNodes[3] = { (*columns[0])[z], (*columns[1])[z], (*columns[2])[z] }; - // assure good orientation - SMDS_VolumeOfNodes tmpVol ( botNodes[0], botNodes[1], botNodes[2], - topNodes[0], topNodes[1], topNodes[2]); - vTool.Set( &tmpVol ); - if ( vTool.IsForward() ) + if ( isForward ) vol = helper->AddVolume( botNodes[0], botNodes[1], botNodes[2], topNodes[0], topNodes[1], topNodes[2]); else @@ -408,11 +443,7 @@ void StdMeshers_Prism_3D::AddPrisms( vector & columns, (*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] }; - // assure good orientation - SMDS_VolumeOfNodes tmpVol ( botNodes[0], botNodes[1], botNodes[2], botNodes[3], - topNodes[0], topNodes[1], topNodes[2], topNodes[3]); - vTool.Set( &tmpVol ); - if ( vTool.IsForward() ) + if ( isForward ) vol = helper->AddVolume( botNodes[0], botNodes[1], botNodes[2], botNodes[3], topNodes[0], topNodes[1], topNodes[2], topNodes[3]); else @@ -462,7 +493,7 @@ bool StdMeshers_Prism_3D::assocOrProjBottom2Top() SMESHDS_SubMesh * topSMDS = topSM->GetSubMeshDS(); if ( !botSMDS || botSMDS->NbElements() == 0 ) - return error(dfltErr(),TCom("No elememts on face #") << botSM->GetId()); + return error(TCom("No elememts on face #") << botSM->GetId()); bool needProject = false; if ( !topSMDS || @@ -470,13 +501,13 @@ bool StdMeshers_Prism_3D::assocOrProjBottom2Top() botSMDS->NbNodes() != topSMDS->NbNodes()) { if ( myBlock.HasNotQuadElemOnTop() ) - return error(dfltErr(),TCom("Mesh on faces #") << botSM->GetId() + return error(TCom("Mesh on faces #") << botSM->GetId() <<" and #"<< topSM->GetId() << " seems different" ); needProject = true; } if ( 0/*needProject && !myProjectTriangles*/ ) - return error(dfltErr(),TCom("Mesh on faces #") << botSM->GetId() + return error(TCom("Mesh on faces #") << botSM->GetId() <<" and #"<< topSM->GetId() << " seems different" ); ///RETURN_BAD_RESULT("Need to project but not allowed"); @@ -492,7 +523,7 @@ bool StdMeshers_Prism_3D::assocOrProjBottom2Top() if ( !TAssocTool::FindSubShapeAssociation( botFace, myBlock.Mesh(), topFace, myBlock.Mesh(), shape2ShapeMap) ) - return error(dfltErr(),TCom("Topology of faces #") << botSM->GetId() + return error(TCom("Topology of faces #") << botSM->GetId() <<" and #"<< topSM->GetId() << " seems different" ); // Find matching nodes of top and bottom faces @@ -500,12 +531,13 @@ bool StdMeshers_Prism_3D::assocOrProjBottom2Top() if ( ! TAssocTool::FindMatchingNodesOnFaces( botFace, myBlock.Mesh(), topFace, myBlock.Mesh(), shape2ShapeMap, n2nMap )) - return error(dfltErr(),TCom("Mesh on faces #") << botSM->GetId() + 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 ) { @@ -515,9 +547,16 @@ bool StdMeshers_Prism_3D::assocOrProjBottom2Top() continue; // wall columns are contained in myBlock // compute bottom node params TNode bN( botNode ); - if ( !myBlock.ComputeParameters( bN.GetCoords(), bN.ChangeParams(), ID_BOT_FACE )) - return error(dfltErr(),TCom("Can't compute normalized parameters ") - << "for node " << botNode->GetID() << " on the face #"<< botSM->GetId() ); + 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; @@ -555,6 +594,7 @@ bool StdMeshers_Prism_3D::projectBottomToTop() // Fill myBotToColumnMap int zSize = myBlock.VerticalSize(); + TNode prevTNode; SMDS_NodeIteratorPtr nIt = botSMDS->GetNodes(); while ( nIt->more() ) { @@ -563,15 +603,20 @@ bool StdMeshers_Prism_3D::projectBottomToTop() continue; // strange // compute bottom node params TNode bN( botNode ); - if ( !myBlock.ComputeParameters( bN.GetCoords(), bN.ChangeParams(), ID_BOT_FACE )) - return error(dfltErr(),TCom("Can't compute normalized parameters ") - << "for node " << botNode->GetID() << " on the face #"<< botSM->GetId() ); + 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(dfltErr(),TCom("Can't compute coordinates ") - << "by normalized parameters on the face #"<< topSM->GetId() ); + 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 @@ -604,13 +649,13 @@ bool StdMeshers_Prism_3D::projectBottomToTop() if ( n->GetPosition()->GetTypeOfPosition() == SMDS_TOP_FACE ) { TNode2ColumnMap::iterator bot_column = myBotToColumnMap.find( n ); if ( bot_column == myBotToColumnMap.end() ) - return error(dfltErr(),TCom("No nodes found above node ") << n->GetID() ); + 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(dfltErr(),TCom("No side nodes found above node ") << n->GetID() ); + return error(TCom("No side nodes found above node ") << n->GetID() ); nodes[ i ] = column->back(); } } @@ -673,6 +718,23 @@ bool StdMeshers_Prism_3D::setFaceAndEdgesXYZ( const int faceID, const gp_XYZ& pa 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 @@ -813,11 +875,11 @@ bool StdMeshers_PrismAsBlock::Init(SMESH_MesherHelper* helper, // detect bad cases if ( nbNotQuad > 0 && nbNotQuad != 2 ) return error(COMPERR_BAD_SHAPE, - TCom("More than 2 not quadrilateral faces") + TCom("More than 2 not quadrilateral faces: ") < 2 ) return error(COMPERR_BAD_INPUT_MESH, - TCom("More then 2 faces meshed with not quadrangle elements") + TCom("More than 2 faces with not quadrangle elements: ") <Surface(), pcurves, isForward ); - SHOWYXZ( endl<<"F "<< iF << " id " << fID << " FRW " << sideFace->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 ); diff --git a/src/StdMeshers/StdMeshers_Prism_3D.hxx b/src/StdMeshers/StdMeshers_Prism_3D.hxx index 564919937..d6fab7b38 100644 --- a/src/StdMeshers/StdMeshers_Prism_3D.hxx +++ b/src/StdMeshers/StdMeshers_Prism_3D.hxx @@ -79,10 +79,12 @@ struct TNode 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) {} + TNode(const SMDS_MeshNode* node = 0): myNode(node), myParams(-1,-1,-1) {} bool operator < (const TNode& other) const { return myNode < other.myNode; } }; diff --git a/src/StdMeshers/StdMeshers_ProjectionSource1D.cxx b/src/StdMeshers/StdMeshers_ProjectionSource1D.cxx index 48121a6b7..8c3ecd939 100644 --- a/src/StdMeshers/StdMeshers_ProjectionSource1D.cxx +++ b/src/StdMeshers/StdMeshers_ProjectionSource1D.cxx @@ -79,12 +79,12 @@ void StdMeshers_ProjectionSource1D::SetSourceEdge(const TopoDS_Shape& edge) if ( edge.IsNull() ) throw SALOME_Exception(LOCALIZED("Null edge is not allowed")); - if ( edge.ShapeType() != TopAbs_EDGE ) + if ( edge.ShapeType() != TopAbs_EDGE && edge.ShapeType() != TopAbs_COMPOUND ) throw SALOME_Exception(LOCALIZED("Wrong shape type")); if ( !_sourceEdge.IsSame( edge ) ) { - _sourceEdge = TopoDS::Edge( edge ); + _sourceEdge = edge; NotifySubMeshesHypothesisModification(); } @@ -224,7 +224,7 @@ void StdMeshers_ProjectionSource1D::RestoreParams(const TopoDS_Shape& s1, const TopoDS_Shape& s3, SMESH_Mesh* mesh) { - _sourceEdge = TopoDS::Edge( s1 ); + _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 index 1431ba22d..e9847420f 100644 --- a/src/StdMeshers/StdMeshers_ProjectionSource1D.hxx +++ b/src/StdMeshers/StdMeshers_ProjectionSource1D.hxx @@ -34,7 +34,6 @@ #include "SMESH_Hypothesis.hxx" #include "Utils_SALOME_Exception.hxx" -#include #include class SMESH_Gen; @@ -62,9 +61,15 @@ public: throw ( SALOME_Exception ); /*! - * Returns the source edge + * Returns the source edge or a group containing edges */ - TopoDS_Edge GetSourceEdge() const { return _sourceEdge; } + 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 to take a mesh pattern from @@ -135,7 +140,7 @@ public: protected: - TopoDS_Edge _sourceEdge; + TopoDS_Shape _sourceEdge; SMESH_Mesh* _sourceMesh; TopoDS_Vertex _sourceVertex; TopoDS_Vertex _targetVertex; diff --git a/src/StdMeshers/StdMeshers_ProjectionSource2D.cxx b/src/StdMeshers/StdMeshers_ProjectionSource2D.cxx index 2b9c54232..84440d25d 100644 --- a/src/StdMeshers/StdMeshers_ProjectionSource2D.cxx +++ b/src/StdMeshers/StdMeshers_ProjectionSource2D.cxx @@ -79,12 +79,12 @@ void StdMeshers_ProjectionSource2D::SetSourceFace(const TopoDS_Shape& Face) if ( Face.IsNull() ) throw SALOME_Exception(LOCALIZED("Null Face is not allowed")); - if ( Face.ShapeType() != TopAbs_FACE ) + if ( Face.ShapeType() != TopAbs_FACE && Face.ShapeType() != TopAbs_COMPOUND ) throw SALOME_Exception(LOCALIZED("Wrong shape type")); if ( !_sourceFace.IsSame( Face ) ) { - _sourceFace = TopoDS::Face( Face ); + _sourceFace = Face; NotifySubMeshesHypothesisModification(); } @@ -150,7 +150,7 @@ void StdMeshers_ProjectionSource2D::SetSourceMesh(SMESH_Mesh* mesh) */ //============================================================================= -TopoDS_Face StdMeshers_ProjectionSource2D::GetSourceFace() const +TopoDS_Shape StdMeshers_ProjectionSource2D::GetSourceFace() const { return _sourceFace; } @@ -291,7 +291,7 @@ void StdMeshers_ProjectionSource2D::RestoreParams(const TopoDS_Shape& s1, const TopoDS_Shape& s5, SMESH_Mesh* mesh) { - _sourceFace = TopoDS::Face( s1 ); + _sourceFace = s1; _sourceVertex1 = TopoDS::Vertex( s2 ); _sourceVertex2 = TopoDS::Vertex( s3 ); _targetVertex1 = TopoDS::Vertex( s4 ); diff --git a/src/StdMeshers/StdMeshers_ProjectionSource2D.hxx b/src/StdMeshers/StdMeshers_ProjectionSource2D.hxx index 28c44aedb..e75e38dab 100644 --- a/src/StdMeshers/StdMeshers_ProjectionSource2D.hxx +++ b/src/StdMeshers/StdMeshers_ProjectionSource2D.hxx @@ -34,7 +34,6 @@ #include "SMESH_Hypothesis.hxx" #include "Utils_SALOME_Exception.hxx" -#include #include class SMESH_Gen; @@ -62,9 +61,15 @@ public: throw ( SALOME_Exception ); /*! - * Returns the source face + * Returns the source face or a group containing faces */ - TopoDS_Face GetSourceFace() const; + 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 to take a mesh pattern from @@ -145,7 +150,7 @@ public: protected: - TopoDS_Face _sourceFace; + TopoDS_Shape _sourceFace; SMESH_Mesh* _sourceMesh; TopoDS_Vertex _sourceVertex1; TopoDS_Vertex _sourceVertex2; diff --git a/src/StdMeshers/StdMeshers_ProjectionUtils.cxx b/src/StdMeshers/StdMeshers_ProjectionUtils.cxx index c276b3afa..3e143481a 100644 --- a/src/StdMeshers/StdMeshers_ProjectionUtils.cxx +++ b/src/StdMeshers/StdMeshers_ProjectionUtils.cxx @@ -45,25 +45,28 @@ #include "utilities.h" -#include #include #include +#include #include #include #include +#include +#include #include -#include #include #include #include +#include +#include #include -#include #include -#include #include +#include +#include -#define RETURN_BAD_RESULT(msg) { MESSAGE(msg); return false; } +#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) {\ @@ -146,10 +149,11 @@ namespace { * \param edges2 - matching edges of another face * \param theMesh1 - mesh 1 * \param theMesh2 - mesh 2 + * \retval bool - true if association was fixed */ //================================================================================ - void FixAssocByPropagation( const int nbEdges, + bool FixAssocByPropagation( const int nbEdges, list< TopoDS_Edge > & edges1, list< TopoDS_Edge > & edges2, SMESH_Mesh* theMesh1, @@ -159,10 +163,44 @@ namespace { { list< TopoDS_Edge >::iterator eIt2 = ++edges2.begin(); // 2nd edge of the 2nd face TopoDS_Edge edge2 = - StdMeshers_ProjectionUtils::GetPropagationEdge( theMesh1, *eIt2, edges1.front() ); - if ( !edge2.IsNull() ) // propagation found for the second edge + 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 subMeshes = tgtMesh1->GetGroupSubMeshesContaining(tgtShape); + list::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(); } } @@ -185,15 +223,32 @@ bool StdMeshers_ProjectionUtils::FindSubShapeAssociation(const TopoDS_Shape& the SMESH_Mesh* theMesh2, TShapeShapeMap & theMap) { - if ( theShape1.ShapeType() != theShape2.ShapeType() ) - RETURN_BAD_RESULT("Different shape types"); + 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()) + if ( !theMap.IsEmpty() ) { + //====================================================================== + // HAS initial vertex association + //====================================================================== switch ( theShape1.ShapeType() ) { - - case TopAbs_EDGE: { + // ---------------------------------------------------------------------- + case TopAbs_EDGE: { // TopAbs_EDGE // ---------------------------------------------------------------------- if ( theMap.Extent() != 2 ) RETURN_BAD_RESULT("Wrong map extent " << theMap.Extent() ); @@ -206,10 +261,11 @@ bool StdMeshers_ProjectionUtils::FindSubShapeAssociation(const TopoDS_Shape& the 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: { + // ---------------------------------------------------------------------- + case TopAbs_FACE: { // TopAbs_FACE // ---------------------------------------------------------------------- TopoDS_Face face1 = TopoDS::Face( theShape1 ); TopoDS_Face face2 = TopoDS::Face( theShape2 ); @@ -247,10 +303,11 @@ bool StdMeshers_ProjectionUtils::FindSubShapeAssociation(const TopoDS_Shape& the VV2[0] = TopExp::FirstVertex( *eIt2, true ); InsertAssociation( VV1[0], VV2[0], theMap, bidirect); } + InsertAssociation( theShape1, theShape2, theMap, bidirect ); return true; } - - case TopAbs_SHELL: + // ---------------------------------------------------------------------- + case TopAbs_SHELL: // TopAbs_SHELL, TopAbs_SOLID case TopAbs_SOLID: { // ---------------------------------------------------------------------- TopoDS_Vertex VV1[2], VV2[2]; @@ -272,22 +329,42 @@ bool StdMeshers_ProjectionUtils::FindSubShapeAssociation(const TopoDS_Shape& the if ( edge2.IsNull() ) RETURN_BAD_RESULT("GetEdgeByVertices() failed"); - // get a face sharing edge1 - TopoDS_Shape F1, F2, FF2[2]; - TopTools_ListIteratorOfListOfShape ancestIt = theMesh1->GetAncestors( edge1 ); - for ( ; F1.IsNull() && ancestIt.More(); ancestIt.Next() ) - if ( ancestIt.Value().ShapeType() == TopAbs_FACE ) - F1 = ancestIt.Value().Oriented( TopAbs_FORWARD ); + // 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 - ancestIt = theMesh2->GetAncestors( edge2 ); - for ( int i = 0; FF2[1].IsNull() && ancestIt.More(); ancestIt.Next() ) - if ( ancestIt.Value().ShapeType() == TopAbs_FACE ) - FF2[ i++ ] = ancestIt.Value().Oriented( TopAbs_FORWARD ); - if ( FF2[1].IsNull() ) - RETURN_BAD_RESULT("2 faces 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() ) @@ -295,7 +372,6 @@ bool StdMeshers_ProjectionUtils::FindSubShapeAssociation(const TopoDS_Shape& the 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() ); @@ -305,13 +381,16 @@ bool StdMeshers_ProjectionUtils::FindSubShapeAssociation(const TopoDS_Shape& the // 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 = FF2[ 0 ]; // (F2 !) if ( !VV1[ 0 ].IsSame( theMap( VV2[ 0 ]))) { - F2 = FF2[ 1 ]; edge2.Reverse(); + if ( FF2[ 1 ].IsNull() ) + F2.Reverse(); + else + F2 = FF2[ 1 ]; } - TopTools_MapOfShape boundEdges; + TopTools_MapOfShape boundEdges; // association of face subshapes and neighbour faces list< pair < TopoDS_Face, TopoDS_Edge > > FE1, FE2; @@ -330,39 +409,280 @@ bool StdMeshers_ProjectionUtils::FindSubShapeAssociation(const TopoDS_Shape& the 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 ); - 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( theMesh1, *eIt1, face1 ); - TopoDS_Face nextFace2 = GetNextFace( theMesh2, *eIt2, face2 ); + 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() ) { @@ -372,7 +692,7 @@ bool StdMeshers_ProjectionUtils::FindSubShapeAssociation(const TopoDS_Shape& the TopoDS_Edge edge2 = TopoDS::Edge( theShape2 ); if ( IsPropagationPossible( theMesh1, theMesh2 )) { - TopoDS_Edge prpEdge = GetPropagationEdge( theMesh1, edge2, edge1 ); + TopoDS_Edge prpEdge = GetPropagationEdge( theMesh1, edge2, edge1 ).second; if ( !prpEdge.IsNull() ) { TopoDS_Vertex VV1[2], VV2[2]; @@ -385,6 +705,7 @@ bool StdMeshers_ProjectionUtils::FindSubShapeAssociation(const TopoDS_Shape& the { InsertAssociation( edge1, prpEdge, theMap, bidirect); // insert with a proper orientation } + InsertAssociation( theShape1, theShape2, theMap, bidirect ); return true; // done } } @@ -394,6 +715,7 @@ bool StdMeshers_ProjectionUtils::FindSubShapeAssociation(const TopoDS_Shape& the 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 @@ -405,40 +727,47 @@ bool StdMeshers_ProjectionUtils::FindSubShapeAssociation(const TopoDS_Shape& the { TopoDS_Face face1 = TopoDS::Face(theShape1); TopoDS_Face face2 = TopoDS::Face(theShape2); + TopoDS_Edge edge1, edge2; // get outer edge of theShape1 - TopoDS_Edge edge1 = TopoDS::Edge( OuterShape( face1, TopAbs_EDGE )); + edge1 = TopoDS::Edge( OuterShape( face1, TopAbs_EDGE )); // find out if any edge of face2 is a propagation edge of outer edge1 + map propag_edges; // use map to find the closest propagation edge for ( TopExp_Explorer exp( face2, TopAbs_EDGE ); exp.More(); exp.Next() ) { - TopoDS_Edge edge2 = TopoDS::Edge( exp.Current() ); - edge2 = GetPropagationEdge( theMesh1, edge2, edge1 ); - if ( !edge2.IsNull() ) // propagation found + edge2 = TopoDS::Edge( exp.Current() ); + pair 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 { - 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); - } - return true; + // 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 @@ -458,8 +787,10 @@ bool StdMeshers_ProjectionUtils::FindSubShapeAssociation(const TopoDS_Shape& the if ( vMap1.Extent() == 1 ) { InsertAssociation( vMap1(1), vMap2(1), theMap, bidirect); - if ( theShape1.ShapeType() == TopAbs_EDGE ) + if ( theShape1.ShapeType() == TopAbs_EDGE ) { + InsertAssociation( theShape1, theShape2, theMap, bidirect ); return true; + } return FindSubShapeAssociation( theShape1, theMesh1, theShape2, theMesh2, theMap); } @@ -488,14 +819,21 @@ bool StdMeshers_ProjectionUtils::FindSubShapeAssociation(const TopoDS_Shape& the // 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; - for ( ; expF.More(); expF.Next() ) { + 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(); - TopoDS_Shape wire = OuterShape( TopoDS::Face( expF.Current() ), TopAbs_WIRE ); - for ( expE.Init( wire, TopAbs_EDGE ); edge.IsNull() && expE.More(); expE.Next() ) + for ( expE.Init( theShape1, TopAbs_EDGE ); edge.IsNull() && expE.More(); expE.Next() ) if ( !IsClosedEdge( TopoDS::Edge( expE.Current() ))) edge = expE.Current(); - if ( !edge.IsNull() ) - break; } if ( edge.IsNull() || edge.ShapeType() != TopAbs_EDGE ) RETURN_BAD_RESULT("Edge not found"); @@ -522,10 +860,16 @@ bool StdMeshers_ProjectionUtils::FindSubShapeAssociation(const TopoDS_Shape& the } } - InsertAssociation( VV1[ 0 ], VV2 [ 0 ], theMap, bidirect); - InsertAssociation( VV1[ 1 ], VV2 [ 1 ], theMap, bidirect); - if ( theShape1.ShapeType() == TopAbs_EDGE ) + 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 ); } @@ -568,6 +912,7 @@ int StdMeshers_ProjectionUtils::FindFaceAssociation(const TopoDS_Face& face1, 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 ))) { @@ -580,10 +925,10 @@ int StdMeshers_ProjectionUtils::FindFaceAssociation(const TopoDS_Face& face1, if ( KO ) RETURN_BAD_RESULT("GetOrderedEdges() failed"); } - reverse = true; } 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 @@ -595,7 +940,6 @@ int StdMeshers_ProjectionUtils::FindFaceAssociation(const TopoDS_Face& face1, if ( KO ) RETURN_BAD_RESULT("GetOrderedEdges() failed"); } - reverse = !reverse; } if ( reverse ) { @@ -613,15 +957,15 @@ int StdMeshers_ProjectionUtils::FindFaceAssociation(const TopoDS_Face& face1, //======================================================================= void StdMeshers_ProjectionUtils::InitVertexAssociation( const SMESH_Hypothesis* theHyp, - TShapeShapeMap & theAssociationMap) + TShapeShapeMap & theAssociationMap, + const TopoDS_Shape& theTargetShape) { string hypName = theHyp->GetName(); if ( hypName == "ProjectionSource1D" ) { const StdMeshers_ProjectionSource1D * hyp = static_cast( theHyp ); - if ( hyp->HasVertexAssociation() ) { + if ( hyp->HasVertexAssociation() ) InsertAssociation( hyp->GetSourceVertex(),hyp->GetTargetVertex(),theAssociationMap); - } } else if ( hypName == "ProjectionSource2D" ) { const StdMeshers_ProjectionSource2D * hyp = @@ -664,6 +1008,9 @@ bool StdMeshers_ProjectionUtils::InsertAssociation( const TopoDS_Shape& theShape theAssociationMap.Bind( theShape2, theShape1 ); return isNew; } + else { + throw SALOME_Exception("StdMeshers_ProjectionUtils: attempt to associate NULL shape"); + } return false; } @@ -677,7 +1024,10 @@ bool StdMeshers_ProjectionUtils::IsSubShape( const TopoDS_Shape& shape, { if ( shape.IsNull() || !aMesh ) return false; - return aMesh->GetMeshDS()->ShapeToIndex( shape ); + return + aMesh->GetMeshDS()->ShapeToIndex( shape ) || + // PAL16202 + shape.ShapeType() == TopAbs_COMPOUND && aMesh->GetMeshDS()->IsGroupOfSubShapes( shape ); } //======================================================================= @@ -733,27 +1083,43 @@ TopoDS_Edge StdMeshers_ProjectionUtils::GetEdgeByVertices( SMESH_Mesh* //================================================================================ /*! * \brief Return another face sharing an edge - * \param aMesh - mesh + * \param edgeToFaces - data map of descendants to ancestors * \param edge - edge * \param face - face * \retval TopoDS_Face - found face */ //================================================================================ -TopoDS_Face StdMeshers_ProjectionUtils::GetNextFace( SMESH_Mesh* mesh, - const TopoDS_Edge& edge, - const TopoDS_Face& face) +TopoDS_Face StdMeshers_ProjectionUtils::GetNextFace( const TAncestorMap& edgeToFaces, + const TopoDS_Edge& edge, + const TopoDS_Face& face) { - if ( mesh && !edge.IsNull() && !face.IsNull() ) +// if ( !edge.IsNull() && !face.IsNull() && edgeToFaces.Contains( edge )) + if ( !edge.IsNull() && edgeToFaces.Contains( edge )) // PAL16202 { - TopTools_ListIteratorOfListOfShape ancestorIt( mesh->GetAncestors( edge )); + 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; } //================================================================================ @@ -762,23 +1128,25 @@ TopoDS_Face StdMeshers_ProjectionUtils::GetNextFace( SMESH_Mesh* mesh, * \param aMesh - mesh * \param theEdge - edge to find by propagation * \param fromEdge - start edge for propagation - * \retval TopoDS_Edge - found edge + * \retval pair - propagation step and found edge */ //================================================================================ -TopoDS_Edge StdMeshers_ProjectionUtils::GetPropagationEdge( SMESH_Mesh* aMesh, - const TopoDS_Edge& theEdge, - const TopoDS_Edge& fromEdge) +pair +StdMeshers_ProjectionUtils::GetPropagationEdge( SMESH_Mesh* aMesh, + const TopoDS_Edge& theEdge, + const TopoDS_Edge& fromEdge) { SMESH_IndexedMapOfShape aChain; - //aChain.Add(fromEdge); + int step = 0; // List of edges, added to chain on the previous cycle pass TopTools_ListOfShape listPrevEdges; - listPrevEdges.Append(fromEdge/*.Oriented( TopAbs_FORWARD )*/); + 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; @@ -823,7 +1191,7 @@ TopoDS_Edge StdMeshers_ProjectionUtils::GetPropagationEdge( SMESH_Mesh* a ori = TopAbs::Reverse( ori ); anOppE.Orientation( ori ); if ( anOppE.IsSame( theEdge )) - return TopoDS::Edge( anOppE ); + return make_pair( step, TopoDS::Edge( anOppE )); aChain.Add(anOppE); listCurEdges.Append(anOppE); } @@ -835,7 +1203,7 @@ TopoDS_Edge StdMeshers_ProjectionUtils::GetPropagationEdge( SMESH_Mesh* a listPrevEdges = listCurEdges; } // while (listPrevEdges.Extent() > 0) - return TopoDS_Edge(); + return make_pair( INT_MAX, TopoDS_Edge()); } //================================================================================ @@ -888,33 +1256,59 @@ FindMatchingNodesOnFaces( const TopoDS_Face& face1, // 1. Nodes of corresponding links: - // get 2 matching edges, not seam ones - TopoDS_Edge edge1, edge2; + // 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 { - edge2 = TopoDS::Edge( eE.Current() ); + // edge 2 + TopoDS_Edge e2 = TopoDS::Edge( eE.Current() ); eE.Next(); - } while ( BRep_Tool::IsClosed( edge2, face2 ) && eE.More()); - if ( !assocMap.IsBound( edge2 )) - RETURN_BAD_RESULT("Association not found for edge " << meshDS2->ShapeToIndex( edge2 )); - edge1 = TopoDS::Edge( assocMap( edge2 )); - if ( !IsSubShape( edge1, face1 )) - RETURN_BAD_RESULT("Wrong association, edge " << meshDS1->ShapeToIndex( edge1 ) << - " isn't a subshape of face " << meshDS1->ShapeToIndex( face1 )); + // 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_Shape V2 = TopExp::FirstVertex( TopoDS::Edge( edge2 )); + TopoDS_Vertex V2 = TopExp::FirstVertex( TopoDS::Edge( edge2 )); if ( !assocMap.IsBound( V2 )) RETURN_BAD_RESULT("Association not found for vertex " << meshDS2->ShapeToIndex( V2 )); - TopoDS_Shape V1 = assocMap( V2 ); + TopoDS_Vertex V1 = TopoDS::Vertex( assocMap( V2 )); // nodes on vertices - SMESHDS_SubMesh * vSM1 = meshDS1->MeshElements( V1 ); - SMESHDS_SubMesh * vSM2 = meshDS2->MeshElements( V2 ); - if ( !vSM1 || !vSM2 || vSM1->NbNodes() != 1 || vSM2->NbNodes() != 1 ) - RETURN_BAD_RESULT("Bad node submesh"); - const SMDS_MeshNode* vNode1 = vSM1->GetNodes()->next(); - const SMDS_MeshNode* vNode2 = vSM2->GetNodes()->next(); + 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; @@ -968,7 +1362,7 @@ FindMatchingNodesOnFaces( const TopoDS_Face& face1, } else { - // there is only seam edge in a face, i.e. it is a sphere. + // 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 @@ -1020,9 +1414,23 @@ FindMatchingNodesOnFaces( const TopoDS_Face& face1, 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, @@ -1031,7 +1439,6 @@ FindMatchingNodesOnFaces( const TopoDS_Face& face1, 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 )) @@ -1083,15 +1490,20 @@ FindMatchingNodesOnFaces( const TopoDS_Face& face1, V2 = TopExp::LastVertex( TopoDS::Edge( edge2 )); if ( !assocMap.IsBound( V2 )) RETURN_BAD_RESULT("Association not found for vertex " << meshDS2->ShapeToIndex( V2 )); - V1 = assocMap( V2 ); - vSM1 = meshDS1->MeshElements( V1 ); - vSM2 = meshDS2->MeshElements( V2 ); - if ( !vSM1 || !vSM2 || vSM1->NbNodes() != 1 || vSM2->NbNodes() != 1 ) - RETURN_BAD_RESULT("Bad node submesh"); - vNode1 = vSM1->GetNodes()->next(); - vNode2 = vSM2->GetNodes()->next(); + 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; } @@ -1300,9 +1712,30 @@ void StdMeshers_ProjectionUtils::SetEventListener(SMESH_subMesh* subMesh, SMESH_subMesh* srcShapeSM = srcMesh->GetSubMesh( srcShape ); - if ( srcShapeSM != subMesh ) - subMesh->SetEventListener( GetSrcSubMeshListener(), - SMESH_subMeshEventListenerData::MakeData( subMesh ), - srcShapeSM ); + 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 index 53064e7f1..8d3939c2d 100644 --- a/src/StdMeshers/StdMeshers_ProjectionUtils.hxx +++ b/src/StdMeshers/StdMeshers_ProjectionUtils.hxx @@ -44,15 +44,17 @@ 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_EXPORT StdMeshers_ProjectionUtils +class StdMeshers_ProjectionUtils { public: typedef TopTools_DataMapOfShapeShape TShapeShapeMap; + typedef TopTools_IndexedDataMapOfShapeListOfShape TAncestorMap; typedef std::map TNodeNodeMap; /*! @@ -92,9 +94,11 @@ class STDMESHERS_EXPORT StdMeshers_ProjectionUtils * \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); + TShapeShapeMap & theAssociationMap, + const TopoDS_Shape& theTargetShape); /*! * \brief Inserts association theShape1 <-> theShape2 to TShapeShapeMap @@ -115,10 +119,6 @@ class STDMESHERS_EXPORT StdMeshers_ProjectionUtils /*! * \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 */ static TopoDS_Edge GetEdgeByVertices( SMESH_Mesh* aMesh, const TopoDS_Vertex& V1, @@ -126,24 +126,26 @@ class STDMESHERS_EXPORT StdMeshers_ProjectionUtils /*! * \brief Return another face sharing an edge - * \param aMesh - mesh - * \param edge - edge - * \param face - face - * \retval TopoDS_Face - found face + * \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_Face GetNextFace( SMESH_Mesh* aMesh, - const TopoDS_Edge& edge, - const TopoDS_Face& face); + 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 TopoDS_Edge - found edge + * \retval pair - propagation step and found edge */ - static TopoDS_Edge GetPropagationEdge( SMESH_Mesh* aMesh, - const TopoDS_Edge& anEdge, - const TopoDS_Edge& fromEdge); + static std::pair GetPropagationEdge( SMESH_Mesh* aMesh, + const TopoDS_Edge& anEdge, + const TopoDS_Edge& fromEdge); /*! * \brief Find corresponding nodes on two faces @@ -205,6 +207,7 @@ class STDMESHERS_EXPORT StdMeshers_ProjectionUtils 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 index 1bfdc41c5..cfae225f3 100644 --- a/src/StdMeshers/StdMeshers_Projection_1D.cxx +++ b/src/StdMeshers/StdMeshers_Projection_1D.cxx @@ -46,15 +46,17 @@ #include #include #include +#include #include #include +#include #include "utilities.h" using namespace std; -#define RETURN_BAD_RESULT(msg) { MESSAGE(msg); return false; } +#define RETURN_BAD_RESULT(msg) { MESSAGE(")-: Error: " << msg); return false; } typedef StdMeshers_ProjectionUtils TAssocTool; @@ -97,13 +99,13 @@ bool StdMeshers_Projection_1D::CheckHypothesis(SMESH_Mesh& const list &hyps = GetUsedHypothesis(aMesh, aShape); if ( hyps.size() == 0 ) { - aStatus = SMESH_Hypothesis::HYP_MISSING; + aStatus = HYP_MISSING; return false; // can't work with no hypothesis } if ( hyps.size() > 1 ) { - aStatus = SMESH_Hypothesis::HYP_ALREADY_EXIST; + aStatus = HYP_ALREADY_EXIST; return false; } @@ -111,7 +113,7 @@ bool StdMeshers_Projection_1D::CheckHypothesis(SMESH_Mesh& string hypName = theHyp->GetName(); - aStatus = SMESH_Hypothesis::HYP_OK; + aStatus = HYP_OK; if (hypName == "ProjectionSource1D") { @@ -130,17 +132,49 @@ bool StdMeshers_Projection_1D::CheckHypothesis(SMESH_Mesh& // source and target vertices if ( !TAssocTool::IsSubShape( _sourceHypo->GetSourceVertex(), srcMesh ) || !TAssocTool::IsSubShape( _sourceHypo->GetTargetVertex(), tgtMesh ) || - !TAssocTool::IsSubShape( _sourceHypo->GetTargetVertex(), aShape ) || !TAssocTool::IsSubShape( _sourceHypo->GetSourceVertex(), _sourceHypo->GetSourceEdge() )) { - aStatus = SMESH_Hypothesis::HYP_BAD_PARAMETER; + aStatus = HYP_BAD_PARAMETER; SCRUTE((TAssocTool::IsSubShape( _sourceHypo->GetSourceVertex(), srcMesh ))); SCRUTE((TAssocTool::IsSubShape( _sourceHypo->GetTargetVertex(), tgtMesh ))); - SCRUTE((TAssocTool::IsSubShape( _sourceHypo->GetTargetVertex(), aShape ) )); 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 ) || @@ -154,7 +188,7 @@ bool StdMeshers_Projection_1D::CheckHypothesis(SMESH_Mesh& } else { - aStatus = SMESH_Hypothesis::HYP_INCOMPATIBLE; + aStatus = HYP_INCOMPATIBLE; } return ( aStatus == HYP_OK ); } @@ -169,13 +203,6 @@ bool StdMeshers_Projection_1D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& if ( !_sourceHypo ) return false; - TopoDS_Edge tgtEdge = TopoDS::Edge( theShape.Oriented(TopAbs_FORWARD)); - TopoDS_Edge srcEdge = TopoDS::Edge( _sourceHypo->GetSourceEdge().Oriented(TopAbs_FORWARD)); - - TopoDS_Vertex tgtV[2], srcV[2]; - TopExp::Vertices( tgtEdge, tgtV[0], tgtV[1] ); - TopExp::Vertices( srcEdge, srcV[0], srcV[1] ); - SMESH_Mesh * srcMesh = _sourceHypo->GetSourceMesh(); SMESH_Mesh * tgtMesh = & theMesh; if ( !srcMesh ) @@ -187,11 +214,23 @@ bool StdMeshers_Projection_1D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& // 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 ); - if ( !TAssocTool::FindSubShapeAssociation( tgtEdge, tgtMesh, srcEdge, srcMesh, - shape2ShapeMap) ) - return error(dfltErr(),SMESH_Comment("Vertices association failed" )); + 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 @@ -236,7 +275,7 @@ bool StdMeshers_Projection_1D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& } bool reverse = ( srcV[0].IsSame( shape2ShapeMap( tgtV[1] ))); - if ( shape2ShapeMap.IsBound( tgtEdge )) // case of closed edge + 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() ); @@ -275,7 +314,7 @@ bool StdMeshers_Projection_1D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& // from the point at given parameter. GCPnts_AbscissaPoint Discret( curveAdaptor, dl * lengths[ i-1 ], tgtParams[ i-1 ] ); if ( !Discret.IsDone() ) - return error(dfltErr(),"GCPnts_AbscissaPoint failed"); + return error("GCPnts_AbscissaPoint failed"); tgtParams[ i ] = Discret.Parameter(); } // make internal nodes diff --git a/src/StdMeshers/StdMeshers_Projection_2D.cxx b/src/StdMeshers/StdMeshers_Projection_2D.cxx index 4aa83bdd0..0ac6f9ea4 100644 --- a/src/StdMeshers/StdMeshers_Projection_2D.cxx +++ b/src/StdMeshers/StdMeshers_Projection_2D.cxx @@ -46,16 +46,16 @@ #include "utilities.h" +#include #include -#include +#include #include -#include - +#include using namespace std; -#define RETURN_BAD_RESULT(msg) { MESSAGE(msg); return false; } +#define RETURN_BAD_RESULT(msg) { MESSAGE(")-: Error: " << msg); return false; } typedef StdMeshers_ProjectionUtils TAssocTool; @@ -144,13 +144,17 @@ bool StdMeshers_Projection_2D::CheckHypothesis(SMESH_Mesh& // target vertices edge = TAssocTool::GetEdgeByVertices ( tgtMesh, _sourceHypo->GetTargetVertex(1), _sourceHypo->GetTargetVertex(2) ); - if ( edge.IsNull() || - !TAssocTool::IsSubShape( edge, tgtMesh ) || - !TAssocTool::IsSubShape( edge, theShape )) + 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 ))); } } @@ -187,10 +191,8 @@ namespace { { // old nodes are shared by edges and new ones are shared // only by faces created by mapper - bool isOld = false; - SMDS_ElemIteratorPtr invElem = node->GetInverseElementIterator(); - while ( !isOld && invElem->more() ) - isOld = ( invElem->next()->GetType() == SMDSAbs_Edge ); + SMDS_ElemIteratorPtr invEdge = node->GetInverseElementIterator(SMDSAbs_Edge); + bool isOld = invEdge->more(); return isOld; } @@ -208,12 +210,13 @@ namespace { MeshCleaner( SMESH_subMesh* faceSubMesh ): sm(faceSubMesh) {} ~MeshCleaner() { Clean(sm); } void Release() { sm = 0; } // mesh will not be removed - static void Clean( SMESH_subMesh* sm ) + static void Clean( SMESH_subMesh* sm, bool withSub=true ) { if ( !sm ) return; - switch ( sm->GetSubShape().ShapeType() ) { - case TopAbs_VERTEX: - case TopAbs_EDGE: { + // 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() ) { @@ -222,12 +225,13 @@ namespace { mesh->RemoveNode( node ); } // do not break but iterate over DependsOn() - } - default: +// } +// default: + if ( !withSub ) return; SMESH_subMeshIteratorPtr smIt = sm->getDependsOnIterator(false,false); while ( smIt->more() ) - Clean( smIt->next() ); - } + Clean( smIt->next(), false ); +// } } }; @@ -365,9 +369,6 @@ bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& if ( !_sourceHypo ) return false; - TopoDS_Face tgtFace = TopoDS::Face( theShape.Oriented(TopAbs_FORWARD)); - TopoDS_Face srcFace = TopoDS::Face( _sourceHypo->GetSourceFace().Oriented(TopAbs_FORWARD)); - SMESH_Mesh * srcMesh = _sourceHypo->GetSourceMesh(); SMESH_Mesh * tgtMesh = & theMesh; if ( !srcMesh ) @@ -375,19 +376,22 @@ bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& SMESHDS_Mesh * meshDS = theMesh.GetMeshDS(); - SMESH_MesherHelper helper( theMesh ); - helper.SetSubShape( tgtFace ); - // --------------------------- // 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 ); - if ( !TAssocTool::FindSubShapeAssociation( tgtFace, tgtMesh, srcFace, srcMesh, - 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 // ---------------------------------------------- @@ -438,12 +442,8 @@ bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& if ( nbEdgesInWires.front() > 1 ) // possible to find out { TopoDS_Edge srcE1 = srcEdges.front(), tgtE1 = tgtEdges.front(); - reverse = ( ! srcE1.IsSame( shape2ShapeMap( tgtE1 ))); - if ( BRep_Tool::IsClosed( tgtE1, tgtFace )) { - reverse = ( srcE1.Orientation() == tgtE1.Orientation() ); - if ( _sourceHypo->GetSourceFace().Orientation() != theShape.Orientation() ) - reverse = !reverse; - } + TopoDS_Shape srcE1bis = shape2ShapeMap( tgtE1 ); + reverse = ( ! srcE1.IsSame( srcE1bis )); } else if ( nbEdgesInWires.front() == 1 ) { @@ -463,14 +463,14 @@ bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& mapper.Apply( tgtFace, tgtV1, reverse ); if ( mapper.GetErrorCode() != SMESH_Pattern::ERR_OK ) - return error(dfltErr(),"Can't apply source mesh pattern to the face"); + 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(dfltErr(),"Can't make mesh by source mesh pattern"); + 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 @@ -484,6 +484,9 @@ bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& 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 @@ -497,7 +500,7 @@ bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& bool isSeam = helper.IsSeamShape( sm->GetId() ); - enum { NEW_NODES, OLD_NODES }; + 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; @@ -518,7 +521,7 @@ bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& } // sort nodes on edges by its position - map< double, const SMDS_MeshNode* > & pos2nodes = u2nodesMaps[ isOld ]; + map< double, const SMDS_MeshNode* > & pos2nodes = u2nodesMaps[isOld ? OLD_NODES : NEW_NODES]; switch ( node->GetPosition()->GetTypeOfPosition() ) { case SMDS_TOP_VERTEX: { @@ -536,14 +539,22 @@ bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& node->GetPosition()->GetTypeOfPosition()); } } - if ( u2nodesMaps[ OLD_NODES ].size() != u2nodesMaps[ NEW_NODES ].size() ) - RETURN_BAD_RESULT("Different nb of old and new nodes " << + 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() ) + } + 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(); diff --git a/src/StdMeshers/StdMeshers_Projection_3D.cxx b/src/StdMeshers/StdMeshers_Projection_3D.cxx index 68eda5d65..af93f888d 100644 --- a/src/StdMeshers/StdMeshers_Projection_3D.cxx +++ b/src/StdMeshers/StdMeshers_Projection_3D.cxx @@ -48,7 +48,11 @@ #include "utilities.h" -#define RETURN_BAD_RESULT(msg) { MESSAGE(msg); return false; } +#include +#include +#include + +#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); \ @@ -92,6 +96,7 @@ bool StdMeshers_Projection_3D::CheckHypothesis(SMESH_Mesh& 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 || @@ -100,7 +105,7 @@ bool StdMeshers_Projection_3D::CheckHypothesis(SMESH_Mesh& aStatus = HYP_BAD_GEOMETRY; return false; } - +*/ list ::const_iterator itl; const list &hyps = GetUsedHypothesis(aMesh, aShape); @@ -206,14 +211,24 @@ bool StdMeshers_Projection_3D::Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aS srcShell = TopoDS::Shell( exp.Current() ); if ( nbShell != 1 ) return error(COMPERR_BAD_SHAPE, - SMESH_Comment("Shape must have 1 shell but not") << nbShell); + 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("Shape must have 1 shell but not") << nbShell); + 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 @@ -251,12 +266,12 @@ bool StdMeshers_Projection_3D::Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aS TopExp::Vertices( TopoDS::Edge( exp.Current() ), tgtV000, tgtV100 ); if ( !shape2ShapeMap.IsBound( tgtV000 ) || !shape2ShapeMap.IsBound( tgtV100 )) - return error(dfltErr(),"Association of subshapes failed" ); + 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(dfltErr(),"Incorrect association of subshapes" ); + return error("Incorrect association of subshapes" ); } // Load 2 SMESH_Block's with src and tgt shells @@ -342,12 +357,12 @@ bool StdMeshers_Projection_3D::Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aS gp_Pnt srcCoord = gpXYZ( srcNode ); gp_XYZ srcParam; if ( !srcBlock.ComputeParameters( srcCoord, srcParam )) - return error(dfltErr(),SMESH_Comment("Can't compute normalized parameters ") + 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(dfltErr(),"Can't compute coordinates by normalized parameters"); + 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() ); diff --git a/src/StdMeshers/StdMeshers_Propagation.cxx b/src/StdMeshers/StdMeshers_Propagation.cxx index 2b701a07a..64ff66f35 100644 --- a/src/StdMeshers/StdMeshers_Propagation.cxx +++ b/src/StdMeshers/StdMeshers_Propagation.cxx @@ -28,10 +28,19 @@ #include "utilities.h" +#include "SMDS_SetIterator.hxx" +#include "SMESH_Algo.hxx" +#include "SMESH_HypoFilter.hxx" #include "SMESH_Mesh.hxx" #include "SMESH_subMesh.hxx" -#include "SMESH_HypoFilter.hxx" -#include "SMDS_SetIterator.hxx" + +#include +#include +#include +#include + +#define DBGMSG(txt) \ +// cout << txt << endl; using namespace std; @@ -106,7 +115,7 @@ TopoDS_Edge StdMeshers_Propagation::GetPropagationSource(SMESH_Mesh& theMesh, namespace { - enum SubMeshState { WAIT_PROPAG_HYP, // no propagation hyp in chain + 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 @@ -115,15 +124,24 @@ namespace { struct PropagationMgrData : public EventListenerData { bool myForward; //!< true if a curve of edge in chain is codirected with one of source edge - PropagationMgrData( SubMeshState state ): EventListenerData(true) { - myType = state; + 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 ); } @@ -131,16 +149,6 @@ namespace { SMESH_subMesh* GetSource() const; }; - //============================================================================= - /*! - * \brief return filter to find Propagation hypothesis - */ - SMESH_HypoFilter & propagHypFilter() - { - static SMESH_HypoFilter propagHypFilter - ( SMESH_HypoFilter::HasName( StdMeshers_Propagation::GetName ())); - return propagHypFilter; - } //============================================================================= /*! * \brief return static PropagationMgr @@ -156,9 +164,9 @@ namespace { } //============================================================================= /*! - * \brief return PropagationMgrData + * \brief return PropagationMgrData found on a submesh */ - PropagationMgrData* getData(SMESH_subMesh* sm) + PropagationMgrData* findData(SMESH_subMesh* sm) { if ( sm ) return static_cast< PropagationMgrData* >( sm->GetEventListenerData( getListener() )); @@ -166,57 +174,61 @@ namespace { } //============================================================================= /*! - * \brief return PropagationMgrData + * \brief return PropagationMgrData found on theEdge submesh */ - PropagationMgrData* getData(SMESH_Mesh& theMesh, const TopoDS_Shape& theEdge) + PropagationMgrData* findData(SMESH_Mesh& theMesh, const TopoDS_Shape& theEdge) { if ( theEdge.ShapeType() == TopAbs_EDGE ) - return getData( theMesh.GetSubMeshContaining( theEdge ) ); + return findData( theMesh.GetSubMeshContaining( theEdge ) ); return 0; } - //================================================================================ + //============================================================================= /*! - * \brief Return an iterator on a chain + * \brief return existing or a new PropagationMgrData */ - SMESH_subMeshIteratorPtr PropagationMgrData::GetChain() const + PropagationMgrData* getData(SMESH_subMesh* sm) { - typedef SMESH_subMesh* TsubMesh; - typedef SMDS_SetIterator< TsubMesh, list< TsubMesh >::const_iterator > TIterator; - switch ( State() ) { - case HAS_PROPAG_HYP: - return SMESH_subMeshIteratorPtr - ( new TIterator( mySubMeshes.begin(), mySubMeshes.end() )); - case IN_CHAIN: - case LAST_IN_CHAIN: - if ( mySubMeshes.empty() ) break; - return getData( mySubMeshes.front() )->GetChain(); - default:; + PropagationMgrData* data = findData( sm ); + if ( !data && sm ) { + data = new PropagationMgrData(); + sm->SetEventListener( getListener(), data, sm ); } - return SMESH_subMeshIteratorPtr - ( new TIterator( mySubMeshes.end(), mySubMeshes.end() )); + return data; } - //================================================================================ + //============================================================================= /*! - * \brief Return a propagation source submesh + * \brief Returns a local 1D hypothesis used for theEdge */ - SMESH_subMesh* PropagationMgrData::GetSource() const + const SMESH_Hypothesis* getLocal1DHyp (SMESH_Mesh& theMesh, + const TopoDS_Shape& theEdge) { - if ( myType == IN_CHAIN || myType == LAST_IN_CHAIN ) - if ( !mySubMeshes.empty() ) - return mySubMeshes.front(); - return 0; + 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 local 1D hypothesis used for theEdge + * \brief Returns a propagation hypothesis assigned to theEdge */ - const SMESH_Hypothesis* isLocal1DHypothesis (SMESH_Mesh& theMesh, - const TopoDS_Shape& theEdge) + const SMESH_Hypothesis* getProagationHyp (SMESH_Mesh& theMesh, + const TopoDS_Shape& theEdge) { - static SMESH_HypoFilter hypo ( SMESH_HypoFilter::HasDim( 1 )); - hypo.AndNot( hypo.IsAlgo() ).AndNot( hypo.IsAssignedTo( theMesh.GetMeshDS()->ShapeToMesh() )); - - return theMesh.GetHypothesis( theEdge, hypo, true ); + 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::const_iterator from, + list::const_iterator to) + { + typedef SMESH_subMesh* TsubMesh; + typedef SMDS_SetIterator< TsubMesh, list< TsubMesh >::const_iterator > TIterator; + return SMESH_subMeshIteratorPtr ( new TIterator( from, to )); } //================================================================================ /*! @@ -225,126 +237,212 @@ namespace { */ bool buildPropagationChain ( SMESH_subMesh* theMainSubMesh ) { - // const TopoDS_Shape& theMainEdge = theMainSubMesh->GetSubShape(); -// if (theMainEdge.ShapeType() != TopAbs_EDGE) return true; - -// SMESH_Mesh* mesh = theMainSubMesh->GetFather(); - -// EventListenerData* chainData = new PropagationMgrData(HAS_PROPAG_HYP); -// theMainSubMesh->SetEventListener( getListener(), chainData, theMainSubMesh ); - -// // Edges submeshes, on which the 1D hypothesis will be propagated from -// list & chain = chainData->mySubMeshes; - -// // List of edges, added to chain on the previous cycle pass -// TopTools_ListOfShape listPrevEdges; -// listPrevEdges.Append(theMainEdge.Oriented( TopAbs_FORWARD )); - -// // 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 -// TopTools_ListIteratorOfListOfShape itA (mesh->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 ) % 4; -// anOppE = anEdges(opp); - -// // add anOppE to aChain if ... -// PropagationMgrData* data = getData( *mesh, anOppE ); -// if ( !data || data->State() == WAIT_PROPAG_HYP ) { // ... anOppE is not in any chain -// if ( !isLocal1DHypothesis( *mesh, anOppE )) { // ... no other 1d hyp on anOppE -// // 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); + 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 & chain = chainData->mySubMeshes; + chain.clear(); + chain.push_back( theMainSubMesh ); + + TopTools_MapOfShape checkedShapes; + checkedShapes.Add( theMainEdge ); + + list::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 + 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 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 ) { - if ( PropagationMgrData* data = getData( subMesh )) { - if ( data->State() == IN_CHAIN ) + 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 {} @@ -352,14 +450,16 @@ namespace { /*! * \brief Set PropagationMgr on a submesh */ + //================================================================================ + void PropagationMgr::Set(SMESH_subMesh * submesh) { - EventListenerData* data = EventListenerData::MakeData(submesh,WAIT_PROPAG_HYP); - + DBGMSG( "PropagationMgr::Set() on " << submesh->GetId() ); + EventListenerData* data = new PropagationMgrData(); submesh->SetEventListener( getListener(), data, submesh ); const SMESH_Hypothesis * propagHyp = - submesh->GetFather()->GetHypothesis( submesh->GetSubShape(), propagHypFilter(), true ); + getProagationHyp( *submesh->GetFather(), submesh->GetSubShape() ); if ( propagHyp ) getListener()->ProcessEvent( SMESH_subMesh::ADD_HYP, SMESH_subMesh::ALGO_EVENT, @@ -367,7 +467,28 @@ namespace { 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 @@ -377,31 +498,36 @@ namespace { void PropagationMgr::ProcessEvent(const int event, const int eventType, SMESH_subMesh* subMesh, - SMESH_subMeshEventListenerData* data, + SMESH_subMeshEventListenerData* listenerData, const SMESH_Hypothesis* hyp) { - if ( !data ) + 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() ); + bool isPropagHyp = ( StdMeshers_Propagation::GetName() == hyp->GetName() ); - switch ( data->myType ) { + PropagationMgrData* data = static_cast( listenerData ); + switch ( data->State() ) { - case WAIT_PROPAG_HYP: { // no propagation hyp in chain + case WAIT_PROPAG_HYP: { // propagation hyp or local 1D hyp is missing // -------------------------------------------------------- - if ( !isPropagHyp ) + bool hasPropagHyp = ( isPropagHyp || + getProagationHyp( *subMesh->GetFather(), subMesh->GetSubShape()) ); + if ( !hasPropagHyp ) return; - if ( !isLocal1DHypothesis( *subMesh->GetFather(), subMesh->GetSubShape())) + bool hasLocal1DHyp = getLocal1DHyp( *subMesh->GetFather(), subMesh->GetSubShape()); + if ( !hasLocal1DHyp ) return; if ( event == SMESH_subMesh::ADD_HYP || - event == SMESH_subMesh::ADD_FATHER_HYP ) // add propagation 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 - clearPropagationChain( subMesh ); buildPropagationChain( subMesh ); } return; @@ -411,32 +537,57 @@ namespace { switch ( event ) { case SMESH_subMesh::REMOVE_HYP: case SMESH_subMesh::REMOVE_FATHER_HYP: // remove propagation hyp - if ( isPropagHyp ) + 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 ) - ; // collision - else - ; // rebuild propagation chain - return; + 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 + if ( event == SMESH_subMesh::REMOVE_HYP ) { // remove local hyp + // rebuild propagation chain + DBGMSG( "REMOVE_HYP 1D from LAST_IN_CHAIN " << subMesh->GetId() ); + list sourceSM = data->mySubMeshes; + clearPropagationChain( subMesh ); + SMESH_subMeshIteratorPtr smIt = iterate( sourceSM.begin(), sourceSM.end()); + while ( smIt->more() ) + buildPropagationChain( smIt->next() ); + } return; } } // switch by SubMeshState } + } // namespace diff --git a/src/StdMeshers/StdMeshers_Propagation.hxx b/src/StdMeshers/StdMeshers_Propagation.hxx index c0d2f3cdf..62ad2a439 100644 --- a/src/StdMeshers/StdMeshers_Propagation.hxx +++ b/src/StdMeshers/StdMeshers_Propagation.hxx @@ -64,7 +64,7 @@ class STDMESHERS_EXPORT StdMeshers_Propagation:public SMESH_Hypothesis static void SetPropagationMgr(SMESH_subMesh* subMesh); /*! - * \brief Return an edge from which hypotheses are propagated from + * \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 diff --git a/src/StdMeshers/StdMeshers_QuadranglePreference.cxx b/src/StdMeshers/StdMeshers_QuadranglePreference.cxx index b16eeb58e..3e04aa872 100644 --- a/src/StdMeshers/StdMeshers_QuadranglePreference.cxx +++ b/src/StdMeshers/StdMeshers_QuadranglePreference.cxx @@ -42,7 +42,7 @@ StdMeshers_QuadranglePreference::StdMeshers_QuadranglePreference(int hyp :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 } //============================================================================= diff --git a/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx b/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx index 8a1659402..12c132959 100644 --- a/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx +++ b/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx @@ -43,23 +43,16 @@ #include "SMDS_EdgePosition.hxx" #include "SMDS_FacePosition.hxx" -#include -#include -#include #include #include +#include #include -#include -#include -#include -#include -#include +#include #include -#include -#include #include #include -#include +#include +#include #include "utilities.h" #include "Utils_ExceptHandlers.hxx" @@ -119,7 +112,7 @@ bool StdMeshers_Quadrangle_2D::CheckHypothesis aStatus = SMESH_Hypothesis::HYP_OK; // there is only one compatible Hypothesis so far - const list &hyps = GetUsedHypothesis(aMesh, aShape); + const list &hyps = GetUsedHypothesis(aMesh, aShape, false); myQuadranglePreference = hyps.size() > 0; return isOk; @@ -132,9 +125,10 @@ bool StdMeshers_Quadrangle_2D::CheckHypothesis //============================================================================= 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); + // PAL14921. Enable catching std::bad_alloc and Standard_OutOfMemory outside + //Unexpect aCatchSalomeException); SMESHDS_Mesh * meshDS = aMesh.GetMeshDS(); aMesh.GetSubMesh(aShape); @@ -238,6 +232,9 @@ bool StdMeshers_Quadrangle_2D::Compute (SMESH_Mesh& aMesh, const vector& uv_e2 = quad->side[2]->GetUVPtStruct(true,1 ); const vector& 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(); // Boundary quadrangles @@ -562,10 +559,8 @@ bool StdMeshers_Quadrangle_2D::Compute (SMESH_Mesh& aMesh, FaceQuadStruct* StdMeshers_Quadrangle_2D::CheckNbEdges(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape) - throw(SALOME_Exception) + //throw(SALOME_Exception) { - Unexpect aCatch(SalomeException); - const TopoDS_Face & F = TopoDS::Face(aShape); const bool ignoreMediumNodes = _quadraticMesh; @@ -596,16 +591,14 @@ FaceQuadStruct* StdMeshers_Quadrangle_2D::CheckNbEdges(SMESH_Mesh & aMes sideEdges.splice( sideEdges.end(), edges, edges.begin()); // edges.front() -> sideEdges.end() bool sameSide = true; while ( !edges.empty() && sameSide ) { - GeomAbs_Shape cont = SMESH_Algo::Continuity( sideEdges.back(), edges.front() ); - sameSide = ( cont >= GeomAbs_G1 ); + sameSide = SMESH_Algo::IsContinuous( sideEdges.back(), edges.front() ); if ( sameSide ) sideEdges.splice( sideEdges.end(), edges, edges.begin()); } if ( nbSides == 0 ) { // go backward from the first edge sameSide = true; while ( !edges.empty() && sameSide ) { - GeomAbs_Shape cont = SMESH_Algo::Continuity( sideEdges.front(), edges.back() ); - sameSide = ( cont >= GeomAbs_G1 ); + sameSide = SMESH_Algo::IsContinuous( sideEdges.front(), edges.back() ); if ( sameSide ) sideEdges.splice( sideEdges.begin(), edges, --edges.end()); } @@ -645,10 +638,8 @@ FaceQuadStruct* StdMeshers_Quadrangle_2D::CheckNbEdges(SMESH_Mesh & aMes FaceQuadStruct *StdMeshers_Quadrangle_2D::CheckAnd2Dcompute (SMESH_Mesh & aMesh, 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); @@ -656,7 +647,12 @@ FaceQuadStruct *StdMeshers_Quadrangle_2D::CheckAnd2Dcompute 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; } @@ -695,9 +691,8 @@ namespace { bool StdMeshers_Quadrangle_2D::SetNormalizedGrid (SMESH_Mesh & aMesh, 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 @@ -738,7 +733,8 @@ bool StdMeshers_Quadrangle_2D::SetNormalizedGrid (SMESH_Mesh & aMesh, const vector& uv_e3 = GetUVPtStructIn( quad, 3, nbvertic - 1 ); if ( uv_e0.empty() || uv_e1.empty() || uv_e2.empty() || uv_e3.empty() ) - return error(dfltErr(), "Can't find nodes on sides"); + //return error( "Can't find nodes on sides"); + return error( COMPERR_BAD_INPUT_MESH ); // nodes Id on "in" edges if (! quad->isEdgeOut[0]) { @@ -888,14 +884,11 @@ static gp_UV CalcUV(double x0, double x1, double y0, double y1, bool StdMeshers_Quadrangle_2D::ComputeQuadPref (SMESH_Mesh & aMesh, const TopoDS_Shape& aShape, FaceQuadStruct* quad) - throw (SALOME_Exception) { - Unexpect aCatch(SalomeException); - 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); +// const TopoDS_Wire& W = BRepTools::OuterWire(F); bool WisF = true; // if(W.Orientation()==TopAbs_FORWARD) // WisF = true; diff --git a/src/StdMeshers/StdMeshers_Quadrangle_2D.hxx b/src/StdMeshers/StdMeshers_Quadrangle_2D.hxx index 90db88e55..72b317be2 100644 --- a/src/StdMeshers/StdMeshers_Quadrangle_2D.hxx +++ b/src/StdMeshers/StdMeshers_Quadrangle_2D.hxx @@ -47,14 +47,8 @@ enum TSideID { BOTTOM_SIDE=0, RIGHT_SIDE, TOP_SIDE, LEFT_SIDE, NB_SIDES }; typedef uvPtStruct UVPtStruct; typedef struct faceQuadStruct { - //int nbPts[4]; - //TopoDS_Edge edge[4]; vector< StdMeshers_FaceSide*> side; - //double first[4]; - //double last[4]; - //bool isEdgeForward[4]; bool isEdgeOut[4]; // true, if an edge has more nodes, than the opposite - //UVPtStruct* uv_edges[4]; UVPtStruct* uv_grid; ~faceQuadStruct(); } FaceQuadStruct; @@ -70,32 +64,27 @@ public: 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, - const bool CreateQuadratic) - throw (SALOME_Exception); + const bool CreateQuadratic); protected: FaceQuadStruct* CheckNbEdges(SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape) - throw (SALOME_Exception); + const TopoDS_Shape& aShape); bool SetNormalizedGrid(SMESH_Mesh& aMesh, 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, - FaceQuadStruct* quad) - throw (SALOME_Exception); + FaceQuadStruct* quad); UVPtStruct* LoadEdgePoints2(SMESH_Mesh& aMesh, const TopoDS_Face& F, const TopoDS_Edge& E, diff --git a/src/StdMeshers/StdMeshers_RadialPrism_3D.cxx b/src/StdMeshers/StdMeshers_RadialPrism_3D.cxx index c83bff525..4bcd5519a 100644 --- a/src/StdMeshers/StdMeshers_RadialPrism_3D.cxx +++ b/src/StdMeshers/StdMeshers_RadialPrism_3D.cxx @@ -45,19 +45,20 @@ #include "utilities.h" -#include -#include -#include #include -#include #include +#include +#include +#include +#include +#include #include #include using namespace std; -#define RETURN_BAD_RESULT(msg) { MESSAGE(msg); return false; } +#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; @@ -98,13 +99,14 @@ bool StdMeshers_RadialPrism_3D::CheckHypothesis(SMESH_Mesh& 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; @@ -158,7 +160,7 @@ bool StdMeshers_RadialPrism_3D::Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& a // to delete helper at exit from Compute() std::auto_ptr helperDeleter( myHelper ); - // get 2 shells + // get 2 shells TopoDS_Solid solid = TopoDS::Solid( aShape ); TopoDS_Shell outerShell = BRepTools::OuterShell( solid ); TopoDS_Shape innerShell; @@ -167,7 +169,7 @@ bool StdMeshers_RadialPrism_3D::Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& a if ( !outerShell.IsSame( It.Value() )) innerShell = It.Value(); if ( nbShells != 2 ) - return error(COMPERR_BAD_SHAPE, SMESH_Comment("Must be 2 shells but not")<ShapeToIndex( outFace )); } else { inFace = TopoDS::Face( shape2ShapeMap( outFace )); @@ -222,12 +224,18 @@ bool StdMeshers_RadialPrism_3D::Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& a vector< const TNodeColumn* > columns( nbNodes ); for ( int i = 0; i < nbNodes; ++i ) { - const SMDS_MeshNode* n = face->GetNode( i ); - TNode2ColumnMap::iterator n_col = node2columnMap.find( n ); - if ( n_col != node2columnMap.end() ) + 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 - columns[ i ] = makeNodeColumn( node2columnMap, n, nodeIn2OutMap[ n ] ); + } + 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 ); @@ -312,24 +320,24 @@ public: const StdMeshers_LayerDistribution* hyp) { double len = pIn.Distance( pOut ); - if ( len <= DBL_MIN ) return error(dfltErr(),"Too close points of inner and outer shells"); + if ( len <= DBL_MIN ) return error("Too close points of inner and outer shells"); if ( !hyp || !hyp->GetLayerDistribution() ) - return error(dfltErr(), "Invalid LayerDistribution hypothesis"); + 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(dfltErr(), "StdMeshers_Regular_1D::CheckHypothesis() failed" - "with LayerDistribution hypothesis"); + 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( C3D, len, f, l, params, false )) - return error(dfltErr(),"StdMeshers_Regular_1D failed to compute layers distribution"); + 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() ); diff --git a/src/StdMeshers/StdMeshers_Regular_1D.cxx b/src/StdMeshers/StdMeshers_Regular_1D.cxx index 9e59aa0c6..b2a507433 100644 --- a/src/StdMeshers/StdMeshers_Regular_1D.cxx +++ b/src/StdMeshers/StdMeshers_Regular_1D.cxx @@ -37,6 +37,7 @@ #include "StdMeshers_Deflection1D.hxx" #include "StdMeshers_AutomaticLength.hxx" #include "StdMeshers_SegmentLengthAroundVertex.hxx" +#include "StdMeshers_Propagation.hxx" #include "SMESH_Gen.hxx" #include "SMESH_Mesh.hxx" @@ -53,12 +54,14 @@ #include #include -#include -#include #include #include #include #include +#include +#include +#include +#include #include @@ -85,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("Propagation"); // auxiliary !!! } //============================================================================= @@ -142,7 +146,9 @@ bool StdMeshers_Regular_1D::CheckHypothesis const StdMeshers_LocalLength * hyp = dynamic_cast (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; @@ -220,7 +226,9 @@ bool StdMeshers_Regular_1D::CheckHypothesis StdMeshers_AutomaticLength * hyp = const_cast (dynamic_cast (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; @@ -232,14 +240,14 @@ bool StdMeshers_Regular_1D::CheckHypothesis } static bool computeParamByFunc(Adaptor3d_Curve& C3d, double first, double last, - double length, bool theReverse, + double length, bool theReverse, int nbSeg, Function& func, list& theParams) { // never do this way //OSD::SetSignal( true ); - if( nbSeg<=0 ) + if (nbSeg <= 0) return false; MESSAGE( "computeParamByFunc" ); @@ -247,17 +255,17 @@ static bool computeParamByFunc(Adaptor3d_Curve& C3d, double first, double last, int nbPnt = 1 + nbSeg; vector 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]; - for( int i=0; i<=nbSeg; i++ ) + for ( int i=0; i<=nbSeg; i++ ) { sprintf( buf, "%f\n", float(x[i] ) ); MESSAGE( buf ); } - + // apply parameters in range [0,1] to the space of the curve @@ -410,6 +418,7 @@ void StdMeshers_Regular_1D::SetEventListener(SMESH_subMesh* subMesh) // while (smIt->more()) { // subMesh->SetEventListener( &listener, 0, smIt->next() ); // } + StdMeshers_Propagation::SetPropagationMgr( subMesh ); } //============================================================================= @@ -519,7 +528,7 @@ void StdMeshers_Regular_1D::redistributeNearVertices (SMESH_Mesh & theM std::swap( algo._value[ BEG_LENGTH_IND ], algo._value[ END_LENGTH_IND ]); } list params; - if ( algo.computeInternalParameters( theC3d, L, from, to, params, false )) + if ( algo.computeInternalParameters( theMesh, theC3d, L, from, to, params, false )) { if ( isEnd1 ) params.reverse(); while ( 1 + nHalf-- ) @@ -542,12 +551,14 @@ void StdMeshers_Regular_1D::redistributeNearVertices (SMESH_Mesh & theM * */ //============================================================================= -bool StdMeshers_Regular_1D::computeInternalParameters(Adaptor3d_Curve& theC3d, +bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh & theMesh, + Adaptor3d_Curve& theC3d, double theLength, double theFirstU, double theLastU, list & theParams, - const bool theReverse) + const bool theReverse, + bool theConsiderPropagation) { theParams.clear(); @@ -563,6 +574,38 @@ bool StdMeshers_Regular_1D::computeInternalParameters(Adaptor3d_Curve& theC3d, { // Local Length hypothesis 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 eltSize = theLength / nbseg; @@ -627,7 +670,7 @@ bool StdMeshers_Regular_1D::computeInternalParameters(Adaptor3d_Curve& theC3d, } GCPnts_UniformAbscissa Discret(theC3d, eltSize, f, l); if ( !Discret.IsDone() ) - return error( dfltErr(), "GCPnts_UniformAbscissa failed"); + return error( "GCPnts_UniformAbscissa failed"); int NbPoints = Discret.NbPoints(); for ( int i = 2; i < NbPoints; i++ ) @@ -657,13 +700,14 @@ bool StdMeshers_Regular_1D::computeInternalParameters(Adaptor3d_Curve& theC3d, GCPnts_AbscissaPoint Discret( theC3d, eltSize, param ); 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; } compensateError( a1, an, U1, Un, theLength, theC3d, theParams ); + if (theReverse) theParams.reverse(); // NPAL18025 return true; } @@ -698,6 +742,7 @@ bool StdMeshers_Regular_1D::computeInternalParameters(Adaptor3d_Curve& theC3d, eltSize += q; } compensateError( a1, an, U1, Un, theLength, theC3d, theParams ); + if (theReverse) theParams.reverse(); // NPAL18025 return true; } @@ -715,7 +760,6 @@ bool StdMeshers_Regular_1D::computeInternalParameters(Adaptor3d_Curve& theC3d, theParams.push_back( param ); } return true; - } default:; @@ -730,14 +774,14 @@ bool StdMeshers_Regular_1D::computeInternalParameters(Adaptor3d_Curve& theC3d, */ //============================================================================= -bool StdMeshers_Regular_1D::Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape) +bool StdMeshers_Regular_1D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape & theShape) { if ( _hypType == NONE ) return false; - SMESHDS_Mesh * meshDS = aMesh.GetMeshDS(); + 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 ); @@ -759,14 +803,14 @@ bool StdMeshers_Regular_1D::Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aSh list< double > params; bool reversed = false; if ( !_mainEdge.IsNull() ) - reversed = aMesh.IsReversedInChain( EE, _mainEdge ); + reversed = ( _mainEdge.Orientation() == TopAbs_REVERSED ); BRepAdaptor_Curve C3d( E ); double length = EdgeLength( E ); - if ( ! computeInternalParameters( C3d, length, f, l, params, reversed )) { + if ( ! computeInternalParameters( theMesh, C3d, length, f, l, params, reversed, true )) { return false; } - redistributeNearVertices( aMesh, C3d, length, params, VFirst, VLast ); + 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 @@ -774,7 +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; - + + /* NPAL18025 + if (reversed) { + idPrev = idLast; + idLast = idFirst; + idFirst = idPrev; + parPrev = l; + parLast = f; + } + */ + for (list::iterator itU = params.begin(); itU != params.end(); itU++) { double param = *itU; gp_Pnt P = Curve->Value(param); @@ -813,12 +867,14 @@ bool StdMeshers_Regular_1D::Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aSh 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; BRep_Tool::Range( E, f, l ); // PAL15185 double du = (l - f) / (NbPoints - 1); - //MESSAGE("************* Degenerated edge! *****************"); gp_Pnt P = BRep_Tool::Pnt(VFirst); @@ -879,11 +935,11 @@ StdMeshers_Regular_1D::GetUsedHypothesis(SMESH_Mesh & aMesh, // 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 - if (aShape.ShapeType() == TopAbs_EDGE && - aMesh.IsPropagatedHypothesis(aShape, _mainEdge)) + _mainEdge = StdMeshers_Propagation::GetPropagationSource( aMesh, aShape ); + if ( !_mainEdge.IsNull() ) { // Propagation of 1D hypothesis from on this edge; // get non-auxiliary assigned to _mainEdge diff --git a/src/StdMeshers/StdMeshers_Regular_1D.hxx b/src/StdMeshers/StdMeshers_Regular_1D.hxx index 269a034bc..4a22e7253 100644 --- a/src/StdMeshers/StdMeshers_Regular_1D.hxx +++ b/src/StdMeshers/StdMeshers_Regular_1D.hxx @@ -73,12 +73,14 @@ public: protected: - virtual bool computeInternalParameters (Adaptor3d_Curve & theC3d, - double theLength, - double theFirstU, - double theLastU, - std::list< double > & theParameters, - const bool theReverse); + virtual bool computeInternalParameters (SMESH_Mesh & theMesh, + Adaptor3d_Curve & theC3d, + double theLength, + double theFirstU, + double theLastU, + std::list & theParameters, + const bool theReverse, + bool theConsiderPropagation = false); virtual void redistributeNearVertices (SMESH_Mesh & theMesh, Adaptor3d_Curve & theC3d, @@ -101,12 +103,12 @@ protected: BEG_LENGTH_IND = 0, END_LENGTH_IND = 1, DEFLECTION_IND = 0 - }; + }; enum IValueIndex { NB_SEGMENTS_IND = 0, DISTR_TYPE_IND = 1, - CONV_MODE_IND = 2 + CONV_MODE_IND = 2 }; enum VValueIndex { diff --git a/src/StdMeshers/StdMeshers_SegmentAroundVertex_0D.hxx b/src/StdMeshers/StdMeshers_SegmentAroundVertex_0D.hxx index 01bf758c7..140c53c51 100644 --- a/src/StdMeshers/StdMeshers_SegmentAroundVertex_0D.hxx +++ b/src/StdMeshers/StdMeshers_SegmentAroundVertex_0D.hxx @@ -27,13 +27,15 @@ #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_SegmentAroundVertex_0D: public SMESH_0D_Algo +class STDMESHERS_EXPORT StdMeshers_SegmentAroundVertex_0D: public SMESH_0D_Algo { public: StdMeshers_SegmentAroundVertex_0D(int hypId, int studyId, SMESH_Gen* gen); diff --git a/src/StdMeshers/StdMeshers_SegmentLengthAroundVertex.hxx b/src/StdMeshers/StdMeshers_SegmentLengthAroundVertex.hxx index a1297c815..3584b51db 100644 --- a/src/StdMeshers/StdMeshers_SegmentLengthAroundVertex.hxx +++ b/src/StdMeshers/StdMeshers_SegmentLengthAroundVertex.hxx @@ -29,6 +29,8 @@ #ifndef _SMESH_SegmentLengthAroundVertex_HXX_ #define _SMESH_SegmentLengthAroundVertex_HXX_ +#include "SMESH_StdMeshers.hxx" + #include "SMESH_Hypothesis.hxx" #include "Utils_SALOME_Exception.hxx" @@ -36,7 +38,7 @@ * \brief This hypothesis specifies length of segments adjacent to the vertex the * hypothesis is assigned to */ -class StdMeshers_SegmentLengthAroundVertex:public SMESH_Hypothesis +class STDMESHERS_EXPORT StdMeshers_SegmentLengthAroundVertex:public SMESH_Hypothesis { public: StdMeshers_SegmentLengthAroundVertex(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 index 000000000..0ce7773ac --- /dev/null +++ b/src/StdMeshers/StdMeshers_UseExisting_1D2D.cxx @@ -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 index 000000000..e0eedabdb --- /dev/null +++ b/src/StdMeshers/StdMeshers_UseExisting_1D2D.hxx @@ -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/SMESH_StdMeshersGUI.hxx b/src/StdMeshersGUI/SMESH_StdMeshersGUI.hxx index 67b4638c6..6171d9f84 100755 --- a/src/StdMeshersGUI/SMESH_StdMeshersGUI.hxx +++ b/src/StdMeshersGUI/SMESH_StdMeshersGUI.hxx @@ -37,4 +37,4 @@ #define STDMESHERSGUI_EXPORT #endif -#endif \ No newline at end of file +#endif diff --git a/src/StdMeshersGUI/StdMeshersGUI_DistrPreview.cxx b/src/StdMeshersGUI/StdMeshersGUI_DistrPreview.cxx index 482aeb6be..460dfb4d5 100644 --- a/src/StdMeshersGUI/StdMeshersGUI_DistrPreview.cxx +++ b/src/StdMeshersGUI/StdMeshersGUI_DistrPreview.cxx @@ -31,8 +31,6 @@ #ifdef NO_CAS_CATCH #include -#else -#include "CASCatch.hxx" #endif StdMeshersGUI_DistrPreview::StdMeshersGUI_DistrPreview( QWidget* p, StdMeshers::StdMeshers_NumberOfSegments_ptr h ) @@ -251,18 +249,12 @@ void StdMeshersGUI_DistrPreview::update() delete[] y; x = y = 0; -#ifdef NO_CAS_CATCH try { +#ifdef NO_CAS_CATCH OCC_CATCH_SIGNALS; -#else - CASCatch_TRY { #endif replot(); -#ifdef NO_CAS_CATCH } catch(Standard_Failure) { -#else - } CASCatch_CATCH(Standard_Failure) { -#endif Handle(Standard_Failure) aFail = Standard_Failure::Caught(); } } @@ -302,19 +294,13 @@ bool isCorrectArg( const Handle( Expr_GeneralExpression )& expr ) bool StdMeshersGUI_DistrPreview::init( const QString& str ) { bool parsed_ok = true; -#ifdef NO_CAS_CATCH try { +#ifdef NO_CAS_CATCH OCC_CATCH_SIGNALS; -#else - CASCatch_TRY { #endif myExpr = ExprIntrp_GenExp::Create(); myExpr->Process( ( Standard_CString ) str.latin1() ); -#ifdef NO_CAS_CATCH } catch(Standard_Failure) { -#else - } CASCatch_CATCH(Standard_Failure) { -#endif Handle(Standard_Failure) aFail = Standard_Failure::Caught(); parsed_ok = false; } @@ -350,18 +336,12 @@ double StdMeshersGUI_DistrPreview::calc( bool& ok ) double res = 0.0; ok = true; -#ifdef NO_CAS_CATCH try { +#ifdef NO_CAS_CATCH OCC_CATCH_SIGNALS; -#else - CASCatch_TRY { #endif res = myExpr->Expression()->Evaluate( myVars, myValues ); -#ifdef NO_CAS_CATCH } catch(Standard_Failure) { -#else - } CASCatch_CATCH(Standard_Failure) { -#endif Handle(Standard_Failure) aFail = Standard_Failure::Caught(); ok = false; res = 0.0; @@ -382,22 +362,16 @@ bool StdMeshersGUI_DistrPreview::convert( double& v ) const { case EXPONENT: { -#ifdef NO_CAS_CATCH try { +#ifdef NO_CAS_CATCH OCC_CATCH_SIGNALS; -#else - CASCatch_TRY { #endif // in StdMeshers_NumberOfSegments.cc // const double PRECISION = 1e-7; // if(v < -7) v = -7.0; v = pow( 10.0, v ); -#ifdef NO_CAS_CATCH } catch(Standard_Failure) { -#else - } CASCatch_CATCH(Standard_Failure) { -#endif Handle(Standard_Failure) aFail = Standard_Failure::Caught(); v = 0.0; ok = false; diff --git a/src/StdMeshersGUI/StdMeshersGUI_LayerDistributionParamWdg.cxx b/src/StdMeshersGUI/StdMeshersGUI_LayerDistributionParamWdg.cxx index 7537e621b..6b66fa066 100644 --- a/src/StdMeshersGUI/StdMeshersGUI_LayerDistributionParamWdg.cxx +++ b/src/StdMeshersGUI/StdMeshersGUI_LayerDistributionParamWdg.cxx @@ -48,9 +48,11 @@ */ //================================================================================ -StdMeshersGUI_LayerDistributionParamWdg::StdMeshersGUI_LayerDistributionParamWdg -( SMESH::SMESH_Hypothesis_ptr hyp, - QDialog* dlg ): QHGroupBox(), myDlg( dlg ) +StdMeshersGUI_LayerDistributionParamWdg +::StdMeshersGUI_LayerDistributionParamWdg(SMESH::SMESH_Hypothesis_ptr hyp, + const QString& theName, + QDialog* dlg): + QHGroupBox(), myName(theName), myDlg( dlg ) { init(); set( hyp ); @@ -119,7 +121,7 @@ void StdMeshersGUI_LayerDistributionParamWdg::init() // Add to pop-up hypotheses of "Regular_1D" algo myHypTypePopup->clear(); HypothesisData* algoData = SMESH::GetHypothesisData( "Regular_1D" ); - myHypTypes = SMESH::GetAvailableHypotheses( false, 0 ); + myHypTypes = SMESH::GetAvailableHypotheses( false, 1 ); QStringList::const_iterator anIter = myHypTypes.begin(); for ( ; anIter != myHypTypes.end(); ++anIter ) { @@ -204,7 +206,7 @@ void StdMeshersGUI_LayerDistributionParamWdg::onEdit() try { QWidget* parent = this; if ( myDlg ) parent = myDlg->parentWidget(); - editor->edit( myHyp, parent ); + editor->edit( myHyp, myName, parent ); } catch(...) { } diff --git a/src/StdMeshersGUI/StdMeshersGUI_LayerDistributionParamWdg.h b/src/StdMeshersGUI/StdMeshersGUI_LayerDistributionParamWdg.h index cc8d7d801..6c6d5f680 100644 --- a/src/StdMeshersGUI/StdMeshersGUI_LayerDistributionParamWdg.h +++ b/src/StdMeshersGUI/StdMeshersGUI_LayerDistributionParamWdg.h @@ -50,7 +50,8 @@ class STDMESHERSGUI_EXPORT StdMeshersGUI_LayerDistributionParamWdg : public QHGr public: StdMeshersGUI_LayerDistributionParamWdg(SMESH::SMESH_Hypothesis_ptr hyp, - QDialog* dlg); + const QString& theName, + QDialog* dlg); ~StdMeshersGUI_LayerDistributionParamWdg(); SMESH::SMESH_Hypothesis_var GetHypothesis() { return myHyp; } @@ -76,6 +77,7 @@ private: QPushButton* myEditButton; QPopupMenu* myHypTypePopup; QDialog* myDlg; + QString myName; QString myParamValue; QStringList myHypTypes; diff --git a/src/StdMeshersGUI/StdMeshersGUI_NbSegmentsCreator.cxx b/src/StdMeshersGUI/StdMeshersGUI_NbSegmentsCreator.cxx index 02bb83a35..f5468b118 100644 --- a/src/StdMeshersGUI/StdMeshersGUI_NbSegmentsCreator.cxx +++ b/src/StdMeshersGUI/StdMeshersGUI_NbSegmentsCreator.cxx @@ -251,8 +251,7 @@ bool StdMeshersGUI_NbSegmentsCreator::readParamsFromHypo( NbSegmentsHypothesisDa 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(); diff --git a/src/StdMeshersGUI/StdMeshersGUI_StdHypothesisCreator.cxx b/src/StdMeshersGUI/StdMeshersGUI_StdHypothesisCreator.cxx index 1be50e5d1..b92bdeac9 100644 --- a/src/StdMeshersGUI/StdMeshersGUI_StdHypothesisCreator.cxx +++ b/src/StdMeshersGUI/StdMeshersGUI_StdHypothesisCreator.cxx @@ -244,16 +244,24 @@ namespace { */ //================================================================================ - SUIT_SelectionFilter* filterForShapeOfDim(const int dim, - const int nbSubShapes = 0, - const TopAbs_ShapeEnum subShapeType = TopAbs_SHAPE, - const bool closed = false) + 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: shapeTypes.Add( TopAbs_EDGE ); break; - case 2: shapeTypes.Add( TopAbs_FACE ); 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 ); @@ -380,6 +388,7 @@ QString StdMeshersGUI_StdHypothesisCreator::storeParams() const StdMeshers::StdMeshers_LocalLength::_narrow( hypothesis() ); h->SetLength( params[0].myValue.toDouble() ); + h->SetPrecision( params[1].myValue.toDouble() ); } else if( hypType()=="SegmentLengthAroundVertex" ) { @@ -512,7 +521,7 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const { HypothesisData* data = SMESH::GetHypothesisData( hypType() ); item.myName = tr( "SMESH_NAME" ); - item.myValue = data ? data->Label : QString(); + item.myValue = data ? hypName() : QString(); p.append( item ); customWidgets()->append(0); } @@ -527,6 +536,9 @@ 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_PRECISION"); + item.myValue = h->GetPrecision(); + p.append( item ); } else if( hypType()=="SegmentLengthAroundVertex" ) { @@ -615,7 +627,7 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const item.myName = tr( "SMESH_LAYERS_DISTRIBUTION" ); p.append( item ); customWidgets()->append - ( new StdMeshersGUI_LayerDistributionParamWdg( h->GetLayerDistribution(), dlg())); + ( new StdMeshersGUI_LayerDistributionParamWdg( h->GetLayerDistribution(), hypName(), dlg())); } else if( hypType()=="ProjectionSource1D" ) { @@ -665,7 +677,7 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const StdMeshers::StdMeshers_ProjectionSource3D::_narrow( hyp ); item.myName = tr( "SMESH_SOURCE_3DSHAPE" ); p.append( item ); - customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 3 , 6, TopAbs_FACE, true ), + 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 ), @@ -696,12 +708,15 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const */ //================================================================================ -void StdMeshersGUI_StdHypothesisCreator::attuneStdWidget( QWidget* w, const int ) const +void StdMeshersGUI_StdHypothesisCreator::attuneStdWidget (QWidget* w, const int) const { 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 ) { diff --git a/src/StdMeshersGUI/StdMeshers_msg_en.po b/src/StdMeshersGUI/StdMeshers_msg_en.po index 922119e14..d8cfd1435 100644 --- a/src/StdMeshersGUI/StdMeshers_msg_en.po +++ b/src/StdMeshersGUI/StdMeshers_msg_en.po @@ -37,6 +37,9 @@ msgstr "Average Length" msgid "SMESH_LOCAL_LENGTH_PARAM" msgstr "Length" +msgid "SMESH_LOCAL_LENGTH_PRECISION" +msgstr "Precision" + msgid "SMESH_LOCAL_LENGTH_TITLE" msgstr "Hypothesis Construction" diff --git a/src/StdMeshers_I/Makefile.am b/src/StdMeshers_I/Makefile.am index 31f0ef39f..9f908c722 100644 --- a/src/StdMeshers_I/Makefile.am +++ b/src/StdMeshers_I/Makefile.am @@ -92,7 +92,8 @@ dist_libStdMeshersEngine_la_SOURCES = \ StdMeshers_LayerDistribution_i.cxx \ StdMeshers_CompositeSegment_1D_i.cxx \ StdMeshers_SegmentAroundVertex_0D_i.cxx \ - StdMeshers_SegmentLengthAroundVertex_i.cxx + StdMeshers_SegmentLengthAroundVertex_i.cxx \ + StdMeshers_UseExisting_1D2D_i.cxx # additionnal information to compil and link file libStdMeshersEngine_la_CPPFLAGS = \ diff --git a/src/StdMeshers_I/StdMeshers_LocalLength_i.cxx b/src/StdMeshers_I/StdMeshers_LocalLength_i.cxx index 4190c1b8c..f360400ca 100644 --- a/src/StdMeshers_I/StdMeshers_LocalLength_i.cxx +++ b/src/StdMeshers_I/StdMeshers_LocalLength_i.cxx @@ -48,15 +48,15 @@ using namespace std; //============================================================================= 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(), - theStudyId, - theGenImpl ); + theStudyId, + theGenImpl ); } //============================================================================= @@ -79,7 +79,6 @@ StdMeshers_LocalLength_i::~StdMeshers_LocalLength_i() * Set length */ //============================================================================= - void StdMeshers_LocalLength_i::SetLength( CORBA::Double theLength ) throw ( SALOME::SALOME_Exception ) { @@ -97,6 +96,30 @@ void StdMeshers_LocalLength_i::SetLength( CORBA::Double 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 @@ -104,7 +127,6 @@ void StdMeshers_LocalLength_i::SetLength( CORBA::Double theLength ) * Get length */ //============================================================================= - CORBA::Double StdMeshers_LocalLength_i::GetLength() { MESSAGE( "StdMeshers_LocalLength_i::GetLength" ); @@ -112,6 +134,20 @@ CORBA::Double StdMeshers_LocalLength_i::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 @@ -119,7 +155,6 @@ CORBA::Double StdMeshers_LocalLength_i::GetLength() * Get implementation */ //============================================================================= - ::StdMeshers_LocalLength* StdMeshers_LocalLength_i::GetImpl() { MESSAGE( "StdMeshers_LocalLength_i::GetImpl" ); @@ -139,4 +174,3 @@ CORBA::Boolean StdMeshers_LocalLength_i::IsDimSupported( SMESH::Dimension type ) { return type == SMESH::DIM_1D; } - diff --git a/src/StdMeshers_I/StdMeshers_LocalLength_i.hxx b/src/StdMeshers_I/StdMeshers_LocalLength_i.hxx index 62c73cbc8..a51997803 100644 --- a/src/StdMeshers_I/StdMeshers_LocalLength_i.hxx +++ b/src/StdMeshers_I/StdMeshers_LocalLength_i.hxx @@ -58,8 +58,14 @@ public: // 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 precision + CORBA::Double GetPrecision(); // Get implementation ::StdMeshers_LocalLength* GetImpl(); diff --git a/src/StdMeshers_I/StdMeshers_NumberOfSegments_i.cxx b/src/StdMeshers_I/StdMeshers_NumberOfSegments_i.cxx index 7f164a290..a53902294 100644 --- a/src/StdMeshers_I/StdMeshers_NumberOfSegments_i.cxx +++ b/src/StdMeshers_I/StdMeshers_NumberOfSegments_i.cxx @@ -27,6 +27,7 @@ // Module : SMESH // $Header$ +using namespace std; #include "StdMeshers_NumberOfSegments_i.hxx" #include "SMESH_Gen_i.hxx" #include "SMESH_Gen.hxx" @@ -37,8 +38,6 @@ #include -using namespace std; - //============================================================================= /*! * StdMeshers_NumberOfSegments_i::StdMeshers_NumberOfSegments_i @@ -84,7 +83,6 @@ SMESH::double_array* StdMeshers_NumberOfSegments_i::BuildDistributionExpr( const CORBA::Long conv ) throw ( SALOME::SALOME_Exception ) { - MESSAGE( "StdMeshers_NumberOfSegments_i::BuildDistribution" ); ASSERT( myBaseImpl ); try { @@ -106,7 +104,6 @@ SMESH::double_array* StdMeshers_NumberOfSegments_i::BuildDistributionTab( const CORBA::Long conv ) throw ( SALOME::SALOME_Exception ) { - MESSAGE( "StdMeshers_NumberOfSegments_i::BuildDistribution" ); ASSERT( myBaseImpl ); std::vector tbl( func.length() ); @@ -139,7 +136,6 @@ SMESH::double_array* StdMeshers_NumberOfSegments_i::BuildDistributionTab( const void StdMeshers_NumberOfSegments_i::SetNumberOfSegments( CORBA::Long theSegmentsNumber ) throw ( SALOME::SALOME_Exception ) { - MESSAGE( "StdMeshers_NumberOfSegments_i::SetNumberOfSegments" ); ASSERT( myBaseImpl ); try { this->GetImpl()->SetNumberOfSegments( theSegmentsNumber ); @@ -163,7 +159,6 @@ void StdMeshers_NumberOfSegments_i::SetNumberOfSegments( CORBA::Long theSegments CORBA::Long StdMeshers_NumberOfSegments_i::GetNumberOfSegments() { - MESSAGE( "StdMeshers_NumberOfSegments_i::GetNumberOfSegments" ); ASSERT( myBaseImpl ); return this->GetImpl()->GetNumberOfSegments(); } @@ -176,7 +171,6 @@ CORBA::Long StdMeshers_NumberOfSegments_i::GetNumberOfSegments() 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 ); @@ -197,7 +191,6 @@ void StdMeshers_NumberOfSegments_i::SetDistrType(CORBA::Long typ) CORBA::Long StdMeshers_NumberOfSegments_i::GetDistrType() { - MESSAGE( "StdMeshers_NumberOfSegments_i::GetDistrType" ); ASSERT( myBaseImpl ); return this->GetImpl()->GetDistrType(); } @@ -213,7 +206,6 @@ CORBA::Long StdMeshers_NumberOfSegments_i::GetDistrType() void StdMeshers_NumberOfSegments_i::SetScaleFactor( CORBA::Double theScaleFactor ) throw ( SALOME::SALOME_Exception ) { - MESSAGE( "StdMeshers_NumberOfSegments_i::SetScaleFactor" ); ASSERT( myBaseImpl ); try { this->GetImpl()->SetScaleFactor( theScaleFactor ); @@ -237,7 +229,6 @@ void StdMeshers_NumberOfSegments_i::SetScaleFactor( CORBA::Double theScaleFactor CORBA::Double StdMeshers_NumberOfSegments_i::GetScaleFactor() throw ( SALOME::SALOME_Exception ) { - MESSAGE( "StdMeshers_NumberOfSegments_i::GetScaleFactor" ); ASSERT( myBaseImpl ); double scale; try { @@ -258,7 +249,6 @@ CORBA::Double StdMeshers_NumberOfSegments_i::GetScaleFactor() void StdMeshers_NumberOfSegments_i::SetTableFunction(const SMESH::double_array& table) throw ( SALOME::SALOME_Exception ) { - MESSAGE( "StdMeshers_NumberOfSegments_i::SetTableFunction" ); ASSERT( myBaseImpl ); std::vector tbl( table.length() ); for (int i = 0; i < table.length(); i++) @@ -282,7 +272,6 @@ void StdMeshers_NumberOfSegments_i::SetTableFunction(const SMESH::double_array& SMESH::double_array* StdMeshers_NumberOfSegments_i::GetTableFunction() throw ( SALOME::SALOME_Exception ) { - MESSAGE( "StdMeshers_NumberOfSegments_i::GetTableFunction" ); ASSERT( myBaseImpl ); const std::vector* tbl; try { @@ -307,7 +296,6 @@ SMESH::double_array* StdMeshers_NumberOfSegments_i::GetTableFunction() void StdMeshers_NumberOfSegments_i::SetExpressionFunction(const char* expr) throw ( SALOME::SALOME_Exception ) { - MESSAGE( "StdMeshers_NumberOfSegments_i::SetExpressionFunction" ); ASSERT( myBaseImpl ); try { this->GetImpl()->SetExpressionFunction( expr ); @@ -328,7 +316,6 @@ void StdMeshers_NumberOfSegments_i::SetExpressionFunction(const char* expr) char* StdMeshers_NumberOfSegments_i::GetExpressionFunction() throw ( SALOME::SALOME_Exception ) { - MESSAGE( "StdMeshers_NumberOfSegments_i::GetExpressionFunction" ); ASSERT( myBaseImpl ); const char* expr; try { @@ -349,7 +336,6 @@ char* StdMeshers_NumberOfSegments_i::GetExpressionFunction() void StdMeshers_NumberOfSegments_i::SetConversionMode(CORBA::Long conv ) throw ( SALOME::SALOME_Exception ) { - MESSAGE( "StdMeshers_NumberOfSegments_i::SetConversionMode" ); ASSERT( myBaseImpl ); try { this->GetImpl()->SetConversionMode( conv ); @@ -370,7 +356,6 @@ void StdMeshers_NumberOfSegments_i::SetConversionMode(CORBA::Long conv ) CORBA::Long StdMeshers_NumberOfSegments_i::ConversionMode() throw ( SALOME::SALOME_Exception ) { - MESSAGE( "StdMeshers_NumberOfSegments_i::ConversionMode" ); ASSERT( myBaseImpl ); int conv; try { @@ -393,7 +378,6 @@ CORBA::Long StdMeshers_NumberOfSegments_i::ConversionMode() ::StdMeshers_NumberOfSegments* StdMeshers_NumberOfSegments_i::GetImpl() { - MESSAGE( "StdMeshers_NumberOfSegments_i::GetImpl" ); return ( ::StdMeshers_NumberOfSegments* )myBaseImpl; } diff --git a/src/StdMeshers_I/StdMeshers_ProjectionSource1D_i.cxx b/src/StdMeshers_I/StdMeshers_ProjectionSource1D_i.cxx index 2b3055a6c..e3d5f4eeb 100644 --- a/src/StdMeshers_I/StdMeshers_ProjectionSource1D_i.cxx +++ b/src/StdMeshers_I/StdMeshers_ProjectionSource1D_i.cxx @@ -26,6 +26,8 @@ // Module : SMESH // $Header$ +using namespace std; + #include "StdMeshers_ProjectionSource1D_i.hxx" #include "SMESH_Gen_i.hxx" @@ -37,8 +39,6 @@ #include "StdMeshers_ObjRefUlils.hxx" -using namespace std; - //============================================================================= /*! * StdMeshers_ProjectionSource1D_i::StdMeshers_ProjectionSource1D_i @@ -74,7 +74,7 @@ StdMeshers_ProjectionSource1D_i::~StdMeshers_ProjectionSource1D_i() //============================================================================= /*! - * Sets source to take a mesh pattern from + * Sets source or a group containing edges to take a mesh pattern from */ //============================================================================= @@ -165,7 +165,7 @@ SMESH::SMESH_Mesh_ptr StdMeshers_ProjectionSource1D_i::GetSourceMesh() //============================================================================= /*! - * Returns the source edge + * Returns the source edge or a group containing edge */ //============================================================================= diff --git a/src/StdMeshers_I/StdMeshers_ProjectionSource1D_i.hxx b/src/StdMeshers_I/StdMeshers_ProjectionSource1D_i.hxx index 0284ba09b..43b9ab024 100644 --- a/src/StdMeshers_I/StdMeshers_ProjectionSource1D_i.hxx +++ b/src/StdMeshers_I/StdMeshers_ProjectionSource1D_i.hxx @@ -59,13 +59,13 @@ public: virtual ~StdMeshers_ProjectionSource1D_i(); /*! - * Sets source to take a mesh pattern from + * Sets source 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 + * Returns the source edge or a group containing edges */ GEOM::GEOM_Object_ptr GetSourceEdge(); diff --git a/src/StdMeshers_I/StdMeshers_UseExisting_1D2D_i.cxx b/src/StdMeshers_I/StdMeshers_UseExisting_1D2D_i.cxx new file mode 100644 index 000000000..5f9a95be4 --- /dev/null +++ b/src/StdMeshers_I/StdMeshers_UseExisting_1D2D_i.cxx @@ -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 index 000000000..6eaf23fb6 --- /dev/null +++ b/src/StdMeshers_I/StdMeshers_UseExisting_1D2D_i.hxx @@ -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 +#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 diff --git a/src/StdMeshers_I/StdMeshers_i.cxx b/src/StdMeshers_I/StdMeshers_i.cxx index d5aa8f6fc..ee8fe66ea 100644 --- a/src/StdMeshers_I/StdMeshers_i.cxx +++ b/src/StdMeshers_I/StdMeshers_i.cxx @@ -59,6 +59,7 @@ #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 StdHypothesisCreator_i:public HypothesisCreator_i @@ -145,6 +146,10 @@ STDMESHERS_I_EXPORT aCreator = new StdHypothesisCreator_i; else if (strcmp(aHypName, "CompositeSegment_1D") == 0) aCreator = new StdHypothesisCreator_i; + else if (strcmp(aHypName, "UseExisting_1D") == 0) + aCreator = new StdHypothesisCreator_i; + else if (strcmp(aHypName, "UseExisting_2D") == 0) + aCreator = new StdHypothesisCreator_i; else ; return aCreator; -- 2.39.2

    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 Ys-5Zf_{(FUK?t6byt-Vmtf}w+0`LSLB>(^b literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/selectionfilterlibrary.png b/doc/salome/gui/SMESH/images/selectionfilterlibrary.png new file mode 100755 index 0000000000000000000000000000000000000000..f07c0964162f3e9b7b9aec82131b78a1d7b2fc22 GIT binary patch literal 28008 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 QgD@F9UHx3vIVCg!0K*`l)&Kwi literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/sewing2.png b/doc/salome/gui/SMESH/images/sewing2.png new file mode 100755 index 0000000000000000000000000000000000000000..66a40997368f8aa82d296a9141e37007bad62c84 GIT binary patch literal 18771 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 AIsgCw literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/sewing3.png b/doc/salome/gui/SMESH/images/sewing3.png new file mode 100755 index 0000000000000000000000000000000000000000..6c74f1cbfa9b240a129cdf0dfc7b50609c5d0e8e GIT binary patch literal 21209 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/sewing4.png b/doc/salome/gui/SMESH/images/sewing4.png new file mode 100755 index 0000000000000000000000000000000000000000..cd9869a852b8e30f6ba9007551143518bf082d55 GIT binary patch literal 17818 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/smoothing.png b/doc/salome/gui/SMESH/images/smoothing.png new file mode 100755 index 0000000000000000000000000000000000000000..0fda00a224d385c17b52c70bb60d05de6aa41c1d GIT binary patch literal 16679 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%0DY1~46b*9x8+ls!IG4e^o)i^C9!mL1Fle@wD3L$ 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 aEART}a+Y(cLVMr|5nhYSh?R)ye)xa7dy(w` literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/smoothing1.png b/doc/salome/gui/SMESH/images/smoothing1.png new file mode 100755 index 0000000000000000000000000000000000000000..763a5300b1a335827619d0f247e57b66b4372844 GIT binary patch literal 12244 zcmYkic|27A8$L{hBB4Yi`;shEWFI3TTN=CYF_L`=k<2ibELm&pyBW%wELn@OligJI zu`^~u3^NRq?Kgd&-}Ahlf95swI%n>4-simU`?~JyzT%9Z=&~~NGSkt~vFht-o6^zI z+tI%NzIcxI*_~66LPsY^r?0JP4$a%j_lY&PYWy7*P~K6VAn>V^X?`hO{ZJ@hU&}@= ziDL91_Y(SWCxVx0Jd=LNRYUxR-#}4*g2^?P@ypj{qm)X#zs6tx+Ia!;=tQuZpjFW7 z8_6g>9TBJQ+x@~J$~)_=EOf;D4Z}Vt?<|Z`?*C~N74m8H(Un}%RLkT{z$n&}*gA=2 zKpV8o%bI`UER626FgIPBZQv;|E;kScj~;Y+w&PzZe4>o>X$>BwzdKX2FLTh83E<@n z_-+G6_)NJlr+YXw--!dNEQ;8d4Qo1WHF?TMuX_~ANo<`Ae&^n~lhc|Mz2YE_D+U;t zw|`c3(H8nicildi-hNA1bKZr|KoAT;)IhSTHc+o-p0p@_v|%n^G{kRMH*ovOJFpu7 z+Wk(W_Dp*y5!Sre3EP&Z*-=n`6N4)-Kae;itU{~FC-`Ble>-WXjq=c>O2Kp=>%gb? zA2JV-9(X!Ok8L{9$C6yr4jQ;^SZnTYjNjkbD2|TH_OVC)q};lL%y{^VgoB?$kKOsx zqZU~5D?{TW+~rR+#rf#eA4@y(9KN%==(wqQj#}5xWF6@BU;yG{EIrfyYeaisHjKEp zHb9M{zJ4(Y5>@803mhJhYzM+y6b-|#PD9w&`8lp}_>hBBA0YF<(FbJ9y(Y1>Bn=Rx z^}tvx7F^TbD)>uvL!iQD&^~p)r=ode%2dysc4{*1<|H3m&7x)de!_M|w1x)OR1*C)55EkR>E_O3oJa&-F#myCt@r9Y1B%pmIHpM~9naZ(mNT3{f#4WQM1yu`u758Si=qA@eJAo0bb#=o~p|Y!CS>)c)6X0o1#pmvWFY z75w=~di;7x1w}?*Q>}~Y4`H(bt03jve#~}y0$Ya5$1YdzEWknoG8%*+t)pXx_?UK} zVTj)9&}QCelD(xuYZA9)LjMJJb++$gDSZat?T)viMISNldQ=vl_JX`MIT}Cv2BtKh z+o5`=NyfAO`xU{elWOh0lTZQwk~`%={Vk+rSO1piDikysU|49J?K$PrFvsjS=ZKmx ztK)uHaXhk#4rAnO%fpdRurX@^Am#HrYu=#6%8((sK^hT*zBz0-F81ee zQD=3s#IHiAO}LSJ`06fy`6l7=If*aI{OwM&9U>O z_($A<+ga|twi$1SaW>R)u9-N(kiTH!kKL&>2?Tl2mRwug@3S@%yxvoB#HlR)$$bc= z1EN3;)W3?|7HB-l<5oGhZv;A*d!0S8)G<^dj%dXQ`hLvPI1xn$pQbRq;|`+V3kYQ% zdKeH(c@dUgev}@C7=o~WS98*~FX=xxITVN|_AZRyLe;)%PubDY?se;OtXgT|#{R0? z)huWo+u1r`T6DP7aePUJ*G`<8y0YFJVg=L@-?n02n1vixoy;RnSFgvj4hFR4EKP>i zxTU=qLffrvH9fuM0F4$=x?N@FP1=7?89L)WXp1bn@Y6MRzbZBDV*8MZ36H5#L zcnQLMf(s4OjimBadwuf{M*V}C_G?Q51~>Uy7>z0mGq>Gv8LI6n?ZYHCDe|)^)2|9< z85F-r@`_}*Gto}!0~M07t@Iice`-?6IMSj?I!b?g(8zr{c{;n;Zc@yEk-hh&M~*_Y2rlG@}=Wh*&hmnZ#Ll?!%B`B zZ+XwCM<*J%m}=k~)^twykAEgk{OS8eT*D^S@YWZtn}U`4Um}nJyy(zmge&y^p#Oog zUwU2XOhZSBI1%YWW+vtnC>QoQw#3c~&V_fq#b7nRHa9`&%GmCmaHtV|f6IGsxpZID zulW-JIn~(Lyrh8RN?r{?R(!krbWiQ zVZ>v}C)Y#$bGYgURcD+c_Y|tW@>|P>qxn7U5|D{)Apw=T8*{8Toq2aiFWTmGzFjG} z?;i0B7kQ1&e*4_mrykX zr#DKnH74h7E0ty5fDo2ky�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 Q)~D0gd7@qQ@L9zF0qlZWsQ>@~ literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/smoothing2.png b/doc/salome/gui/SMESH/images/smoothing2.png new file mode 100755 index 0000000000000000000000000000000000000000..bfce45739f4bf1834a7efe8549e9a009c537dde1 GIT binary patch literal 12606 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 Q_y7O^07*qoM6N<$g0QXzaR2}S literal 0 HcmV?d00001 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 index 0000000000000000000000000000000000000000..9d06262b05e46d672dfaecbec0fb90b90c9ba5f7 GIT binary patch literal 4276 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 LXYzfAfQ$bJf>_1! literal 0 HcmV?d00001 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 index 0000000000000000000000000000000000000000..ae1d98fdffbef606b48e14f94e4c11a9a5ddec94 GIT binary patch literal 4598 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 F{}&ec%s~JE literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/cut_groups1.png b/doc/salome/gui/SMESH/images/cut_groups1.png new file mode 100755 index 0000000000000000000000000000000000000000..f066a554169075e9f4d69ed72244578ee5e987ab GIT binary patch literal 31301 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/cut_groups2.png b/doc/salome/gui/SMESH/images/cut_groups2.png new file mode 100755 index 0000000000000000000000000000000000000000..3ec7a93d1ddb55bec8882c1e8867d3c947a7bc73 GIT binary patch literal 33639 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 qSN(&?VZGh|f8T0z`HM&t$h literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/cutgroups.png b/doc/salome/gui/SMESH/images/cutgroups.png new file mode 100755 index 0000000000000000000000000000000000000000..87e6da88b55a9ae881e939991bb859f616376ce6 GIT binary patch literal 10203 zcma)ibzD^OzU?3>f;58UNGjd!2olmFEsY~cOG~$ubhmZ$Kb4Uf}m@94z1`gaAbd z0?~uyr6o0Vf_4^MKanD4dk*%j75y-X{22-9!QWtwuYw6N*|9^2@er?w5>B76qJ?HV zd8&y7o8D)=CuoiH?FTiP_%jSNA`B*qpHzTbE9wuewXW=Y3VvC5z4v$jU9TwT^O z%|EXunVXrfsr523GD^$ffcfbK1-0xO1%(X*0|N`-9Nu(IefU;pvbjQ1nDNBO(IIyQ zMNP%CS}C<(QahpwCiThiurOfDRV{JmC!swf+D;^CvTcHhuOh_tPM+W zro*mZk3u3MG~=VA37y*=?T`vnspmpUI3}-oc{TfTUfvX&PVuRcQ-*0y;!||jILe&Z z2uT8kA+$7FDtA3BQ9Z0MQ!rCUz%e^X?#{M`f{nTC%v@G#W@Ot3?&#P=#Ff6kQb=mY zckP1%!Ihm%KY6>oUMSQoIw2)!!cr!G%!D`PqoZR7w70dOzunAvMIn_+Q18G`-J;r& z_ZN}6Yyet7-v>q}2@*_9GEE1ikjL#%-_IwN`v*1IQ-qA$jJC0{G`w6++f6dwcs<1? z#~{K4RkX*KQaP8n?oBcAtI!fAqa6E{?sJq-+rk1(hKgK`09E+Rzz_9&5sy=9{Kt#k z9E*nhY8ssRX7(GF^3}>@Z>dDd|Q)6Y5 zWcRjmO^Qw+Rq)H8?+~sERI(pKsB>ASUVsl0C6X8UwZ7*OwSv$0Mw9`Ln%}1T2F|{7 zN5{eog}1mHW_+&m_AG;`0v#Xtvth7nVp(32+(lmBlsRF%E zHWZkjZq%4s<$up3*V8jU=5)4c(AQ0Hbc>PbO-J@>Xvj$RxfZME1(Us2v%#g5r?OZS z4mwp%{ixWnOJVz<%UYh{sR??L>JH;Zr_s8TC}#%bRfcHwD~-3&iJ9`c>rS`)0G zY#v7^*mPKG>Q-Lhu)wbkwjI9FP*tuVk8%y+j_<_c(o_4=vZ&d$X~0!^%6zJi$4^=< z``2cdruNUy^5x^0tLW-#rV)!7W3i4%xcydf?P#xD&xPWQ{#E}Q>m9Sf)aAXsC>U&> z_7seolvzz_S*qijM$OQVj*bd@?6Ny=O>$HS{vKcz&<^egMVr-NNBH~03Ro={X=lKW zLP#qEEk5syYdkTZ>yWv*E2$N;XYxs<bd)#a<|gb%M2_@8BQVF^^78&`c&rP%Xmu(*Qx^5 zjyxLfdXJIi<{v`(ayZ2nt1FQW4Pr^9S3$rBK9wLNA0HcB94jDld%IC08w>yO$D1p+ z*it6-+Dw9*+L;iEczxKcU>aGI%D1uK6s8b7bb4s#BT(|7nWv|xu+NS7)4r!NlUV7L zxoe_ncA!_aP_Y)w*YW8&15YMcQZ5mdcqOQyCzf4jNX`q1V)@z>GSt~Q;k`uF zU>Hl^npsPDdUp42(L%lq_)<`=a0#s&^3iSISK+bqTG4i<~B=nG-&^p zzc75{D_d3MyE%uJ#Trq6{5cgu;MhjX6rICGZ*Pcmklz{BNJBUz5s!^_7t7_!GZWq{ zs+D)mY55S6^|r3QAtuA7YheLBLnU~|x_jZf`Ieqn*~~Ut9xJX^8kytI6tp;3$CFJ> zYeA|MUCK`$ZleW$gBK0z`a8$RPA?E!wWyD`({>ra@nr`SCFx?Wkplw*#8zU7Y7_d} zy1#LF9R>n&Mi{~f`8~d%LdU|#C?(Nbwb&BpOy?C0* zlLFM34)1oYs*R61A-Dr#-&_OrY)_V~<#XQDcwD_H_aZn3q~ukEUMlS~lwXJ(*~)xP zJ`irY%IBd|$rNt?a@Y89weP(83fqrH4sHJ?uVYA5Fo0lj%?Jm_JEWtB)AVwS@1EF~ z-wkw82T|W|?*Jm5U$jgJ>T=kCT9OzMd<5sQQJvGt|gC z$36|4ZF@;(UVL-nq!Y>yaQpUhOiJj4Wml{PlYjtCfMlClWlT&==#2H+Xo3^60xO3o zXT*C(`dZIM=kR(LSz=TDHlv!RS%+Mzg~jz=*;?0J{ngZaQkk|7{E0eLAI;*MI&!~8 zlRy){RM1?C%+q-$pGLfy{)u#agYUZdI-;G?K)$EcPe`z%IGN*=hTFC`!}Fj??0(W{ z`jIYg$sTo&CkTJ;p<}b%8gg(}vvS`??2F>%oW()~rkrc(*TE((5#(8umvknA##=-? zYQLGlgx_udS0NqAq!6|1-fYpQTdHme-hk>tTGkrdueTgU1`^mUHMgs=H>dY(u9t)9 za4dJ>ku*z>^jOYZL=&whPbi0U_r5z9CQ{E;hUGtULd29!O3QeM!s^Nqb2(7++qdg3 z_ha5qEbs0{0*y{Y0JE~opM%Ak(?F%IA@TYU2eq81V52Go8s&Hv2Fsq>;;FBXNlDlJ zZO-nxV@1wq7LI9kdh&&mf5+SjcUpr&WQ%(bZiVh^SjtuIVj|vqzv7D$N?|9ot}ezc zKR}F-8yoUDbB*c!I=sa}&Ci{09@FgN{Z@t3&tgohtkzrU#Bz~}_}B(VG9O$eqt3V9 z+%xi~?Qm4}`OLKQ%)_+h&-lzONBQo?gQ@k8a_XG!7$dNY6UEomN7L4VDp{(WH7Ykd z7&!R&Oe0O0t~J)J8xKw|_IAgU-NIe>r#4*o&kFl@?I6qH#dBfvf@+lpb@7s8-6z8v zPEa$mSr26qlNF1Km=p^cOgt=!uzRvO*Ayj*`H>JC!TE)S*T+~xMpdNel>G*C)`G|% z65ByWBTx5l!fSIt3}&=z+sLuZEhRfJn`sVkDId#Wr%)IMNAy1_(~;;K(sFZH%hwk@kr;fu0DrWUWr`fi z*bZ%JR?(4jgsi(m0jxyD{^#4Q6MYo5hX`cdvqY&6TK+Lr?zCG0W2qPAF|bOw#KWumhZKim@cOE z41)>y9NifQ(Wyv=&EID_KhkEob%DXcvRTJZw9Pjsz@xZh*~& za?DBDEbV?mox%2fsJ?k+*xI#PaRvU_u`phOqh6^Bja6BUJ)z^vWfdjGjHDLvR}H{& z+87P;YB5+{DkRvSJLpH0*i`C@xF55gY)<9t)!NETaw;+OdrS!R+G4p@TeSAa?LA>_ zjjFu=R2=n3%v%45H=?0M2hL4c@79Kf#4uACoZ0 zg)%Fr3Uj@6{^+^&iT{RGv`MOTv8jCaOXK;Pp`a~fd2}|&0_wJhmDLAUK(xjv&L6?w zGj=s8YF%bgNO%=YIeeXr9|n~d9}EN zgrFH~tnFa$%*;$cf~sV-bm!|uRotYl=r?KYPlC0lT%zeovOoXwLB;eHAWH=C*C%GO zYT8b4j$4964Vhz0l0{B?Gywrfe7oS7xZ*QS*QI_)^I}TG@@#uJL`?5;xKaL~x?jOx z3Fn(z1pD5%!cAEmu(X?e^nEaYX)EGUer?o`Fc;uoKM*aEqoA*@js5l85HL?$kTS7U z$mr4030pMK`NxuO%E)+ivs1| z&ED3tbx+|Q;J`YyyHkpGIUQ3lI$+82mYNPQp}^yf&m+wC1Wo|W_=@H(0XX07ddfUA-Qa*^u(wOVoI; zTH@qb-Sc+g3`3Bhb73%}BbZ>U;=LlXgh1#_rI{Eup~3#>z1bQYy-k<CW5GCFoLd1YWK;WvPsG#t~U6(~~FJ^8(LSg-iM6EqPNYxQ#(PTcyEDXS)l!2a~uc!p$K4__;d!6)B^ht}dck zzVQpg(kY~F340%B;PCUL%(BP4P@IlneAi|=As6a~v+eGlp5X9DT!%xOt_qqg0174w zwMhsmUYMFb5p&%wDq?;B=5NiFG~<698WI8o3*^2%v>so0a(aGmA^UCcZ5imfeJ2XF z_}mB9O}E&+oSy;$tggP^L@+HhEX+aXD2Q+(UeTZZtU&4Itw{X0TWZ|a0bRbM0U^7a zMyaHy+b3%rX>7U0QaC#?YI1>usVtH}0f^rRYIf~!;j8|I12Iq}gK_jEQXewK!`fw5 zWnI+9;!kAv52NWF!SyKyA-}-EiGL4qI z!}6ciM=EJ*4rM`9UoL$Hb@uc;5`8ubODLSKvLFFy;d@>l@u@L|>hlXmV5uQ&_BC(( zGIn=LkRx*7{cdBu+vFBzuawOF zt@RkupCo1kLCsfUZuabkaoAr+PVoX~Im_~>6Bo??FJ<9aPE`+;#!&;x=21+32dG~ zwt<8be(31n{01==Gd!BRO+}wPjgJc4ok=K3T z15z9)urE|Xk#%*#0D~PI9%cjN)_8q7$H>SmjC{IzqOJ<*I$QEmH9mSVzc4QX%)p^n z107Y5OO~(_gu!AH61x18$cF(gLprFzWe+BNnzJ5hVi+w`y0r(duGjpE)nQan^=XsX|TE|G)$<`#_c8m!I1{Ub!;i`P9 zklk+jUNdTMrH9T3dYV21B#~uSQ=E(5sGT>(KC8VkN}1v*U)LnBs`gkmCyNz7zUF38 zNv8)0Qc_ZqTEabEo`j{`1|^7exV}7jH(zIufsJ`IyH(0#KPpYmuG2d2=6K(dwo}{4 zN9OfwLZCFy7ClNe=GcIwGVBwnP7vO(o_?&Exp}3<7_(N1{ziHY*bE&wPmv|pt;vY< z^G`pWHtxLur1XR0T$rVwMFf=)=drWCKJ_<=ml=B}?p~RQw^bkfvRQ*l%m;(5becUy zfZSsp-~IDLn$0Vv%yWP+)HfI+_NL1NTy|y;+ENKX=hwY^;y33jO5v$%c*He~t;CLx)rcQnt0hvV}27VFhkd|a0LBFkVt zl>SY1?|HhgTlV-Cxm2B2F80jj$rdHAQ^=9mmS8b($4zhHsEz3#IgXdHxr)g*^GplrHX{9F6slJZ}6jiyO?J7f|j5#V1*%p;~ zjmM*knhT8JKv|76`mNz|bg_4?iQ+kgQmYKLtboS(FX;ITG}vHmq7Vth2$EFFcXsko zYMg(Rp^y;<`?=Z@Oy^w(6VeQM#v)Onz$ldbVEOUrUxXg_+L|5`zEVs0g(~Z;h^BAo z>kFWlQKtV#kD%2RP@89>aa`4BwS-+FHc-1sc`xR;D2yEq`+J?Rr03Y2zP#=C3JUfeye` zN#r#6g?MH9H{to#JFX>q7{!yCMsk4y3A-HK zqVe(Qdb^dW(54&R_?DNKL5xgHL{03e&RbIl8?&lz*VR)G44REvysf9}{D35s?A&@Y z{)hN&`%zJpE*z-C6j5i`Q6(AyzVS+4L?ibKW_BKeW`)RSzv3um5 z9MD+sK?@D8=3RPhceY`KOak{)I5|fcHPhAk!HU!FJf$zELBq$ZX?vu(L4z|UJwJcE zdcF!mmy?q-ayawb(3yJ^tuH_fqApbgPpFBA)FzcVVgrH2`Vo>qg4g7JW_r_jF;C-O z%NO4rLDRD<(Qt5Zunc&J#>&f#CrMli01=^1cXB+=cDENAl79a-Mw)w^Z8Lp0$0;u_ zulg|a1n%%}xF37YZeVOok4-@P9oUQK)ksgBM_m%?!id;ZN~7^veT9$l`3v{s^)>=A z?~f`T+vPnJeC~M7-p%uqzXk8zL)U4t6v*lM!s)!gq?p9**sUZkE?%a?&aV5j^I~SQ zSWma{6Hi}XAN$)zR=9(rk%0mLMq683Aj{3p-VV+Lbe~!G7a)oBSlQUo-EpvO=P2-HNklu=gp|DckY zz8k|P_mM(vuGX7yR9BKwo#jN3=ylHqFBcz^1MbV2VHt*rk3oRkdUsb`XPbk~Ua0gj^i)hjIy!iC+e-@Z58TV>?V;h}=)b3o zd~yM~j2A}HSs*7Dlb$|MvHl)3kil2mUeolQ(9si(K9JQg!N{A(`Im;_Rm-Cdpx2d) zy#v7hY{?sC6EoKT2Hm*zCHgw$Y~0RVEr|d}*q+b%V!i(A>Z|M|84^;`&XF9s6n=Z+ zxf;8blpk>J+pY^IphW}T>LImoYo|PkZkaI}fc@g=oy0rr=l=@W{#QgFnC2(tV!fEM zH9!M$KE(JBb+^Ru@NkAI^Ma!$!%}Se=g%`EX~ga&@D-)q6=dNr0*(NG|MXx_0IE#F z!gbRd?|-0`xxx)WrtjWaj8w>EBK!jaW~!|o-4DIL4Jpg&QY1$wq@d_+3&2J@KhKF` zbNV23p9lQRFyX8>k=>wufRgWEf4|kVybQV#`*%03{|oxEK{^07`OF4d=jNzXRaF;5 zywS_B=K;RfsbaOupke|uOLrB-()VBY&oz5_G|ykY_j3zN&GfnWv&Qj^5ujjz`))ldG#8g?r4N*%7RdBIG*N-?2LCvu)zw^|tL2h->7mv4^WShs`4@MiCyIY@ z2aVRmj^vIbB+0&lUFr3w7FE1d%6!OXiMtWA&%PAP@xOV1LN&=e z*fXMqgl`}acH-T;0EODcYt0^ecNTQsbfGi=&GMKz04oYJ>k9flt{&S-ZzZeW&c?qp2t?GM)2O_$lD8yXri zvakRJMe+LgK@VN&=9+~+3}!uF6|>wCT>1WpTsDf*U_$xl)5iKMWx&>T06ZNr@?jMa zr{V{lB-``#BpD^LCqlNbB4%F}Y89IT`TQq0H?-e7JA;jGM>^G(nwb}Z*3+%iJn#Aj z28zPWw5);&=(?AdvJO^ykd&Xg;Zso}l}G>v!5a&OLa4JnE|;Gj@lVyK8(g_Sbl&G+ zpxwAEbZaosdG4c)Wu--qe8BknzCW=MAV46iM~VY&kg>>zBH#%Y5kOb~kD--WBA(sp z8R$OY<;hOZA)-GtD$2a~H~3Bq0rIx9t4p)brCuQdx8lJgP5`0F=5K*6j2y~zY&L3e z;h-`VEV~*+Br7p%3zg66wb)8@&{E32Fb08GR5P8tT>x8MVX}f{n0#;#{v2f;I@ab5 zS^S)g@9VWhK*`&Qsi$_WU-!|k`zGQ@$!a7U6RYDSAn%8I-r>~)c;$05iLrcDb3k>2 z8V`T5HD1mZde-dnnF@A(WyOt&V{qF*B%DXj_&P?;as5A1`1-bK#f5qLo~sB zwl9vwV!R;c=sI)3h%O*hxG}_v_(O=d?+n zzRPdTQEsI`vmxhrE3Ke_3rI$XA?5bF2=fB}s(GcS z<#?YrxN}hcKT|o!8Ig*R5FG7dSU13oZqOymfPVi0%?_yv=?XixsBJx)=$DHBW19Ex z%#7YTS=x+tLRBR6`bCK+V0>r4_nHs0O)XJ@E`uRxVPU%YD`NypT+Ze5IqNv!z`}XR zC;nY66vJc^SBeP%@5E|ASlG~l&UX6+lc7@4IXNy^`u=gXm)clm`W`+A$(iSidnszG zImr#Y)KuJ3lH7MWx9w>M687OCBi*l>4by*(1BQivXES>fH%f1g!G+!$r1*mscRo9b ziwDRumyCSU>JRgq(6K}$T{glfWiTxhcBp}TQ6s3Zk5d0Ya?a5wir(Tw8-qO?Jc^tBpDz-VYSHcmb)H567* zN9mY75K983WtM>5qnu)=Mlp@t&|=DzKhh+lE-Y*5(|x}ykgLa@P+JX5lNg-#PD4R} zrGxZ!dbwFkwi;NkW`$eZ%`xN;QXK?w9V+yJ*aI6uFv|vxVu_ z@J^V873R>?lKY~YZltrj+Y}T(J*^}4;sn=yR#)Ho3clE1NvGx@fpg?}k%EsT8PfhG ziwm~3mF+kgJH0sSN|A_U|9KM|Pf|)kMOCJ&?SNigbyTvH$-8nA;Fs literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/deletegroups.png b/doc/salome/gui/SMESH/images/deletegroups.png new file mode 100755 index 0000000000000000000000000000000000000000..383a79aa82a6035e99c5b28dd81ed1af0e92f5f2 GIT binary patch literal 8871 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

     See - Also a sample TUI Script of an Extrusion - operation.